第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > c语言预处理命令12个 C语言编译预处理和预处理命令

c语言预处理命令12个 C语言编译预处理和预处理命令

时间:2023-05-04 22:13:32

相关推荐

c语言预处理命令12个 C语言编译预处理和预处理命令

1.预处理概念:编译程序时,编译器将对程序文件作至少两个阶段的编译预处理,预处理程序预处理阶段和编译程序预处理阶段。

预处理程序预处理阶段:C预处理程序先于C编译程序运行。预处理程序从前向后根据预处理命令做相应的处理。预处理命令分为三类:

①文件包含命令

②宏定义命令

③条件编译命令

编译程序预处理阶段:

①将注释替换为空格字符

②将续行符连接的物理行合并成逻辑行

③将仅用空白字符分隔的多个字符串直接连接

2.文件包含命令:在预处理程序文件时,遇到包含文件预处理命令行,都用filename文件中的全部内容替代这一行,使其成为程序文件的一部分参与编译。双引号包含的文件名优先在程序文件所在的目录查找,如果找不到,再从C编译系统指定的目录中查找。

#inlcude

#include "filname.h"

3.宏定义命令:指用一个标识符来代替一个字符序列。有两种宏形式:类对象宏(object-like macro)定义与类函数宏(function-like macro)定义。前者时不带参数的宏定义形式,后者时带参数的宏定义形式。带参数宏定义中宏名和左括号之间不能有空格,右括号和宏主体之间至少有一个空格。仅有括号(没有宏参数)是允许的。

#define 宏名(宏参数1, 宏参数2, ...) 宏主体

调用形式:宏名(替换参数1, 替换参数2,...),宏参数与替换参数只有参数个数和顺序的对应关系,不存在类型一致性的问题。

#define MAX(A,B) ((A)>(B)?(A):(B))

......

源文件:x=MAX(p+q,r+s);

替换成:x=((p+q)>(r+s)?(p+q):(r+s));

......

对于出现在宏主体中的宏名,宏展开时不做任何替换;但它之前定义的宏名出现在宏主体时,宏展开要实施替换。

包含在字符串直接常量和注释中的宏调用形式不进行替换。

宏主体是由若干符号和符号的组合构成的,不能通过宏替换形成一个常数或标识符。

函数调用时,先求出实参的值然后传给形参;宏调用仅替换不求值。

4.条件编译命令:仅当指定条件为真时,#if控制结构包含的代码才被编译。主要的三种类型如下:

#ifdef 宏名

/*程序段1*/

#else

/*程序段2*/

#endif

#ifndef 宏名

/*程序段1*/

#else

/*程序段2*/

#endif

#if 表达式

/*程序段1*/

#elif 表达式

/*程序段2*/

#elif 表达式

/*程序段3*/

#else

/*程序段4*/

#endif

标签:宏名,定义,替换,C语言,编译,参数,程序段,预处理

来源: /yuukirito/p/14751049.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。