C语言编译预处理和预处理命令
2021-05-30 11:05
标签:UNC style 一致性 对象 双引号 控制结构 mac pre col 1.预处理概念:编译程序时,编译器将对程序文件作至少两个阶段的编译预处理,预处理程序预处理阶段和编译程序预处理阶段。 ①文件包含命令 ②宏定义命令 ③条件编译命令 ①将注释替换为空格字符 ②将续行符连接的物理行合并成逻辑行 ③将仅用空白字符分隔的多个字符串直接连接 2.文件包含命令:在预处理程序文件时,遇到包含文件预处理命令行,都用filename文件中的全部内容替代这一行,使其成为程序文件的一部分参与编译。双引号包含的文件名优先在程序文件所在的目录查找,如果找不到,再从C编译系统指定的目录中查找。 3.宏定义命令:指用一个标识符来代替一个字符序列。有两种宏形式:类对象宏(object-like macro)定义与类函数宏(function-like macro)定义。前者时不带参数的宏定义形式,后者时带参数的宏定义形式。带参数宏定义中宏名和左括号之间不能有空格,右括号和宏主体之间至少有一个空格。仅有括号(没有宏参数)是允许的。 4.条件编译命令:仅当指定条件为真时,#if控制结构包含的代码才被编译。主要的三种类型如下: C语言编译预处理和预处理命令 标签:UNC style 一致性 对象 双引号 控制结构 mac pre col 原文地址:https://www.cnblogs.com/yuukirito/p/14751049.html
#inlcude
#define 宏名(宏参数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));
......
#ifdef 宏名
/*程序段1*/
#else
/*程序段2*/
#endif
#ifndef 宏名
/*程序段1*/
#else
/*程序段2*/
#endif
#if 表达式
/*程序段1*/
#elif 表达式
/*程序段2*/
#elif 表达式
/*程序段3*/
#else
/*程序段4*/
#endif