盐城市城镇化建设投资集团网站,iis7配置asp网站,出入合肥最新通知今天,网页制作与设计项目策划书跟着肯哥#xff08;不是我#xff09;学预处理机制 预处理类别
宏定义#xff1a;#define
将文本替换为表达式或语句
条件编译#xff1a;#ifdef、#ifndef和#if、#elif、#endif
根据标识符是否被定义选择编译代码
头文件包含#xff1a;#include
将其他文件#x… 跟着肯哥不是我学预处理机制 预处理类别
宏定义#define
将文本替换为表达式或语句
条件编译#ifdef、#ifndef和#if、#elif、#endif
根据标识符是否被定义选择编译代码
头文件包含#include
将其他文件通常是头文件包含到当前文件中以便在当前文件中使用头文件中定义的内容
预处理流程
预处理指令识别宏替换条件编译头文件包含行连接处理宏展开和条件编译的递归处理 预处理指令识别 扫描源代码并识别以#开头的预处理指令。 宏替换 预处理器根据宏定义将代码中的宏名称替换为指定的文本。 可以是常量替换也可以是带参数的宏函数替换 预处理器会根据宏定义展开宏 条件编译 根据条件选择性地编译不同的代码块。 #ifdef、#ifndef和#if、#elif、#endif 头文件包含 通过#include指令将其他文件通常是头文件包含到当前文件中以便在当前文件中使用头文件中定义的内容 预处理的行连接处理 在C语言中行连接处理是预处理阶段的一部分用于将一行代码书写为多行以保持代码可读性。 行连接操作通过反斜杠\字符实现。一行代码以反斜杠字符结尾时该行代码将与下一行自动连接为一行。 换行之后的进位也会被当作空格输出出来。 行连接在预处理阶段在编译阶段看到代码时已经是连接在一起的一行。这种处理不会影响编译器的语义分析和中间代码。 宏展开和条件编译的递归处理 在进行宏展开和条件编译时如果遇到新的预处理指令预处理器会递归地处理这些指令。肯呢个会触发更多的宏展开和条件编译。 删除注释 预处理器将源代码中的注释删除注释在预处理阶段无需保留不会影响编译器的输出。 预编译的警告信息和错误信息 可以使用#error和#warning预处理指令来生成编译错误和警告信息。这些指令在预处理时发出特定的错误或警告信息让开发者知道代码中存在的问题或需要注意的地方 #error和#warning指令生成的信息只会在预处理阶段发出而不会影响到最终的目标代码它们在编译阶段不会生成任何错误或警告信息。
查看预处理后的源文件
以肯哥用的GCC为例。 可以使用-E选项来查看预处理后的源文件。只进行预处理操作不进行编译、汇编和链接。将预处理后的源文件输出到标准输出流一般是控制台。 gcc -E example.c 编译器会将预处理后的内容输出到控制台。 如果你想将预处理后的源文件保存到一个文件中可以使用重定向操作符将输出重定向到一个文件中。 gcc -E example.c preprocessed.c 上述命令会将预处理后的源文件保存到名为preprocessed.c的文件中。
重点强调
宏定义的命名规范宏定义与函数调用的冲突#include不单单是只能包含头文件include的本质就是纯文本包含。善用条件编译在庞大工程代码的配置裁剪工作中绝大多数的技术手段就是利用条件编译对不同的代码选用和删除达到代码裁剪的效果。