三种预处理详解
1、宏定义指令
宏定义了一个代表特定内容的标识符。预处理过程会把源代码中出现的宏标识符替换成宏定义时的值。
宏最常见的用法是定义代表某个值的全局符号;而第二种用法是定义带参数的宏(宏函数),这样的宏可以象函数一样被调用,但它是在调用语句处展开宏,并用调用时的实际参数来代替定义中的形式参数。
#define指令:
#define预处理指令用来定义宏。该指令最简单的格式是:声明一个标识符,给出这个标识符代表的代码(比如像圆周率这样的数)。在后面的源代码中,我们就可以使用定义的宏取代要使用的代码,代码举例:
#define pi 3.141592654 使用宏的好处有两点:
一是使用方便。如下:
#define pi 3.1415926 pi显然比3.1415926写着方便。
二是定义的宏有了意义,可读性强。如例1,max_num,望文生意便知是最大数量的意思,比单纯使用10这个数字可读性要强的多。
三是容易修改。如例1,如果在程序中有几十次会使用到max_num,修改只需要在宏定义里面修改一次就可以,否则你会修改到崩溃。
2、条件编译指令
程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。
#if/#endif/#else/#elif指令:
#if指令检测跟在制造另关键字后的常量表达式。如果表达式为真,则编译后面的代码,直到出现#else、#elif或#endif为止;否则就不编译。
#endif用于终止#if预处理指令。
#else指令用于某个#if指令之后,当前面的
#if指令的条件不为真时,就编译
#else后面的代码。
代码举例:
#define debug //此时#ifdef debug为真//#define debug 0 //此时为假int main(){ #ifdef debug printf(debuggingn); #else printf(not debuggingn); #endif printf(runningn); return 0;} 这样我们就可以实现debug功能,每次要输出调试信息前,只需要#ifdef debug判断一次。不需要了就在文件开始定义#define debug 0
#elif预处理指令综合了#else和#if指令的作用。
3、头文件包含指令
采用头文件的目的主要是为了使某些定义可以供多个不同的c源程序使用。因为在需要用到这些定义的c源程序中,只需加上一条#include语句即可,而不必再在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。
#include预处理指令的作用是在指令处展开被包含的文件。包含可以是多重的,也就是说一个被包含的文件中还可以包含其他文件。标准c编译器至少支持八重嵌套包含。预处理过程不检查在转换单元中是否已经包含了某个文件并阻止对它的多次包含,这个的处理办法上面已经给出。
在程序中包含头文件有两种格式:
#include #include my.h 第一种方法是用尖括号把头文件括起来。这种格式告诉预处理程序在编译器自带的或外部库的头文件中搜索被包含的头文件。
第二种方法是用双引号把头文件括起来。这种格式告诉预处理程序在当前被编译的应用程序的源代码文件中搜索被包含的头文件,如果找不到,再搜索编译器自带的头文件。
采用两种不同包含格式的理由在于,编译器是安装在公共子目录下的,而被编译的应用程序是在它们自己的私有子目录下的。一个应用程序既包含编译器提供的公共头文件,也包含自定义的私有头文件。采用两种不同的包含格式使得编译器能够在很多头文件中区别出一组公共的头文件。
预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。
基于声发射信号的汽轮机动静摩擦监测
dfrobot 空中飞鼠键盘介绍
关于自适应前照灯系统的性能分析
车队管理正在努力利用物联网技术的全部潜力
研华iMachine设备云智联系统 AI赋能设备价值新未来
预编译的理解及作用原理
银行金融行业液晶拼接屏系统解决方案概述
微软发布补丁修正Windows和Office中5处缺陷
投资31亿美元,德州仪器将新建 12英寸模拟半导体晶圆制造厂
浪涌保护器的前端防线:SCB后备保护器
仓库RFID集装箱贵重物品物流管理的解决方案
siri是最强的人工智能吗?苹果改进Siri以便更好地理解口吃用户需求
369起!科唛无线麦克风新品Vimo C一跃成为性价比之首
实用声控准双工无线对讲机
努比亚发布红魔全新配色,霸气十足!
集成电路等十大重点产业成湖北重中之重,五年内投资将超10万亿
无线接入技术,无线接入技术是什么意思
汽车安全技术之安全座椅
华为光伏并网逆变器SUN2000-196KTL-H0交直流接线注意事项
电子控制燃油喷射系统的原理与断油控制的方式介绍