您的位置:首页 > 编程语言 > C语言/C++

【C语言】预处理(部分内容未整理)

2017-05-16 22:41 204 查看
预处理器的主要作用就是:

  把通过预处理的内建功能对一个资源进行等价替换

  最常见的预处理有: 文件包含,条件编译、布局控制和宏替换4种。

文件包含:    #include 是一种最为常见的预处理,主要是做为文件的引用组合源程序正文。

条件编译:    #if,#ifndef,#ifdef,#endif,#undef等也是比较常见的预处理,主要是进行编译时进行有选择的挑选,注释掉一些指定的代码,以达到版本控制、防止对文件重复包含的功能。

布局控制:    #progma,这也是我们应用预处理的一个重要方面,主要功能是为编译程序提供非常规的控制流信息。

宏替换:    #define,这是最常见的用法,它可以定义符号常量、函数功能、重新命名、字符串的拼接等各种功能。


一、 预定义符号

为了处理一些有用的信息,预处理定义了一些预处理标识符:

 __LINE__  当前(源代码文件)行号 [整数]
 __FILE__  当前正在编译的文件的文件名 [字符串]
 __DATE__  当前日期 [字符串]
 __TIME__  当前时间 [字符串]
 __STDC__  如果编译器符合ANSI C标准,该宏为1,否则为0


二、 预处理指令:(#define)

(一)几种用法:

1、#define name stuff 将stuff替换为name,在下文中便于理解

2、#define uchar unsigned char 用于简写关键字

3、#define do_forever for(;;) 替换一种语句

4、#define CASE break;case 自动的把一个break放在每个case的前面

#符号应该是这一行的第一个非空字符,一般我们把它放在起始位置。如果指令一行放不下,可以通过反斜杠“/”进行控制


Eg:#define DEBUR_PRINT printf(“*file %s line %d:”    \
“x = %d, y= %d,z=%d”,  \
__FILE__,__LINE__,    \
x,y,z)


注意:这种方法不要滥用,对于一些相同的代码要出现在多个地方时,通常更好的方法是用函数来实现。

(二)宏

#define机制中有个规定,允许吧参数替换到文本中,这种通常称为宏或者宏定义:


Eg:#define name(参数列表)  stuff


注意:参数列表是用逗号分开的

   Name和括号间不能空开

对于宏定义有一些问题,如下介绍:

(宏定义中每一部分都加上括号可避免一些问题,且宏定义后面不要有分毫,否则在替换后会另单独产生一个空语句)





(三)宏与函数



(四)#undef

作用:如果一个现有的宏需要被重新定义,那么旧的需要先移除

(五)命令行定义(暂时未用)

(六)其他(暂时未用)

#argument结构由预处理器转换为字符串常量”argument".##操作符用于把它两边的文本粘贴成同一个标识符。


三、 条件编译

(一)在编译时,有些语句需要忽略,可以实现注释掉的效果,还可以避免一些错误

#if()….#endif,
#if()…#elif()…#else


Eg:#if DEBUG
………………
#endif
#define DEBUG  X


当不用这里面的代码时,让X为0,用的时候X为1即可

(二)其他条件编译(暂时用到)





四、 文件包含

主要是做为文件的引用组合源程序正文

习惯上:包含本地函数:#include”…..”

     包含函数库里的:#include<……>

五、 其他指令(暂时未用)



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言