本文共 1426 字,大约阅读时间需要 4 分钟。
在C语言中,预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。
条件编译指令将决定哪些代码被编译,哪些是不被编译的。可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。
下面是部分预处理指令:
指令用途
# 空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 #ifdef 如果宏已经定义,则编译下面代码 #ifndef 如果宏没有定义,则编译下面代码 #elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif 结束一个#if……#else条件编译块 #error 停止编译并显示错误信息#if 指令检测跟在后面的常量表达式,如果表达式为真,则编译后面的代码,直到出现#else、#elif或#endif为止;否则就不编译。
#endif用于终止#if预处理指令。
#include#define DEBUG 0int main(){ #if DEBUG printf("Debugging\n"); #endif printf("Running\n"); return 0;}
由于程序定义DEBUG宏代表0,所以#if条件为假,不编译后面的代码直到#endif,所以程序直接输出Running。
如果去掉#define语句,效果是一样的。
#include#define DEBUGint main(){ #ifdef DEBUG printf("YES\n"); #endif #ifndef DEBUG printf("NO\n"); #ednif return 0;}
#ifdefined等价于#ifdef;#if!defined等价于#ifndef
#else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后面的代码。#endif指令将终止上面的条件块。
#include#define DEBUGint main(){ #ifdef DEBUG printf("Debugging\n"); #else printf("Notdebugging\n"); #endif printf("Running\n"); return 0;}
#elif预处理指令综合了#else和#if指令的作用。
#include#define TWOint main(){ #ifdef ONE printf("1\n"); #elif defined TWO printf("2\n"); #else printf("3\n"); #endif return 0;}
程序很好理解,最后输出结果是2。
转载地址:http://dpqpx.baihongyu.com/