预处理#

一、预编译

  预编译又称预处理,是整个编译过程中最先做的工作,主要是做代码文本的替换工作。主要处理#开头的指令,如拷贝#include包含头文件中的内容,替换#define定义的宏,条件编译#if等。

二、#和##的作用

  #和##都是运算符。#是把宏参数转化为字符串的运算符,##是把两个宏参数连接的字符串。

例1:

#include <stdio.h>
#define STR(arg) #arg
#define STR2(arg) arg

void main()
{
printf("STR result:%s\n",STR("OK"));
printf("STR result:%s\n",STR(OK));
printf("STR2 result:%s\n\n",STR2("OK"));
}

结果:

STR result:"OK"
STR result:OK
STR2 result:OK

例2:

#include <stdio.h>
#define ADL(a,b) (a##b)

void main()
{
printf("ADL result:%d\n",ADL(2,3));
}

结果:

ADL result:23

三、避免文件头被重复

1、使用条件编译

#ifndef _TE_H

#define _TE_H

......

#endif

例:(错误)

/////////////////////////////////////////////////////////////////////////////////////////////////////

te.c:

#include <stdio.h>
#include "te.h"
#include "te.h"

extern int i;

void main()
{
printf("%d\n",i);
}

te.h:

int i=3;

结果:

te.h:1: error: redefinition of ‘i‘
te.h:1: note: previous definition of ‘i‘ was here

/////////////////////////////////////////////////////////////////////////////////////////////////////

2、使用#pragma once

例:(正确)

/////////////////////////////////////////////////////////////////////////////////////////////////////

te.c:

#include <stdio.h>
#include "te.h"
#include "te.h"

extern int i;

void main()
{
printf("%d\n",i);
}

te.h:

#pragma once

int i=3;

结果:

3

/////////////////////////////////////////////////////////////////////////////////////////////////////

时间: 2024-10-12 13:49:29

预处理#的相关文章

预处理指令

1.预处理指令 即编译之前执行的指令 C中的预处理指令包括:文件包含,宏定义,条件编译 2.文件包含#include <stdio.h> <>和""的区别 #include <file_1.h> //直接在C库函数头文件所在目录下找 #include "file_1.h" //先在main.c所在目录下找,若无到环境变量path路径中找,若无,到C库函数头文件所在目录中找 #include可能会导致重复包含文件,降低编译效率 解决

OC高效率52之多用类型常量,少用#define预处理指令

// //  ViewController.m //  OC高效率52之多用类型常量,少用#define预处理指令 /**  *     1. 不要用预处理定义常量.这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找与替换操作.即时有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中得常量值不一致.        2.在实现文件中使用static const 来定义"只在编译单元内可见的常量".由于此类常量不在全局符号表中,所以无需为其名称加前缀.     

简单的预处理操作

运用opencv完成的基本的预处理操作 # -*- coding: UTF-8 -*-import cv2import numpy as np def recognition(img):    #灰度化    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    cv2.imshow('gray', gray)    cv2.waitKey(0) #二值化    ret, binary = cv2.threshold(gray, 109, 255, cv

数据预处理(完整步骤)

原文:http://dataunion.org/5009.html 一:为什么要预处理数据?(1)现实世界的数据是肮脏的(不完整,含噪声,不一致)(2)没有高质量的数据,就没有高质量的挖掘结果(高质量的决策必须依赖于高质量的数据:数据仓库需要对高质量的数据进行一致地集成)(3)原始数据中存在的问题:不一致 —— 数据内含出现不一致情况重复不完整 —— 感兴趣的属性没有含噪声 —— 数据中存在着错误.或异常(偏离期望值)的数据高维度二:数据预处理的方法(1)数据清洗 —— 去噪声和无关数据(2)数

unity平台的预处理(宏的定义)

在unity的跨平台中,我们常常会在各个平台游走,如安卓版,苹果版,PC版.在不同的平台上,我们要做不同的操作.然而我们可以使用unity的自带的宏定义来做平台的判断.Unity帮我们定义了例如以下平台预处理.(还有一些版本号的宏定义,这里没有写出来.) 我们使用#if #elif #endif进行宏命令的判断,unity会自己判断哪些条件成立,然后执行指定的代码.例子如下: 此外,我们还可以自己对宏命令进行定义:在edit-project settings-player中的设定栏可以添加属于自

POJ - 2253 Frogger(Floyd最短路+预处理)

题目链接:http://poj.org/problem?id=2253 题意:青蛙要从点1到点2,给出各点的坐标,如果点A到点B可以通过A->C,C->B,A到B的距离可以用A->C和C-B中较长的一边代替(如果A直接到B更短的话就不用了),求点1到点2的最短距离. 题解:本来想用dijkst,但是想想就200的数据量,直接Floyd岂不美滋滋.先预处理一下各点之间的距离.因为取两条边中较长的那条边,所以转移的话,那转移的两条边都要比原来的短才可以. 值得注意的是用C的格式输入的时候要用

机器学习系列(6)_从白富美相亲看特征预处理与选择(下)

作者:viewmode=contents">龙心尘 &&寒小阳 时间:2016年1月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50493845. http://blog.csdn.net/han_xiaoyang/article/details/50503115 声明:版权全部,转载请联系作者并注明出处 1. 剧情一:挑螃蟹的秘密 李雷与韩梅梅的关系发展得不错.趁国庆休假一起来天津玩. 今天,李雷十分

4、多用类型常量,少用#define预处理指令

摒弃: #define ANIMATION_DURATION 0.3 #define ERROR_MESSAGE @"ErrorMessage" 1)没有常量的类型信息 2)假设此指令声明在某个头文件中,那么所有引入了这个头文件的代码,都可以访问和修改ANIMATION_DURATION. 推荐: 1.私有常量 .m文件 static const NSTimeInterval kAnimationDuration = 0.3; static NSString *const kError

PHP:PDO prepare预处理

许多成熟的数据库都支持预处理语句(Prepared Statements)的概念.它们是什么东西?你可以把它们想成是一种编译过的要执行的SQL语句模板,可以使用不同的变量参数定制它.预处理语句具有两个主要的优点: 查询只需要被解析(或准备)一次,但可以使用相同或不同的参数执行多次.当查询准备好(Prepared)之后,数据库就会分析,编译并优化它要执行查询的计划.对于复杂查询来说,如果你要重复执行许多次有不同参数的但结构相同的查询,这个过程会占用大量的时间,使得你的应用变慢.通过使用一个预处理语

c 预处理的宏定义

概念 以“#”号开头的都是预处理命令 例如 #include <stdio.h>宏定义 宏定义无参数的宏名后不带参数# 表示这是一条预处理命令, define 为宏定义命令.“标识符”为所定义的宏名.“字符串”可以是常数,表达式.格式串等 举例: #define PI 3.1415926 作用: 就是用指定标识符PI来代替数3.1415926 对源程序作编译时, 将先由预处理程序进行宏代换, 即用3.1415926表达式去置换所有的宏名PI, 然后编译 #include <stdio.h