首页 > 代码库 > C语言条件编译
C语言条件编译
学习C语言也快两年了,一直知道有这东西,但是却一直没去认真学习下。其实还是非常简单的。只怪自己太懒。
只有在昨天学习《THINKING IN JAVA》时候才看到,JAVA用异常来代替了C语言的条件编译功能。好坏自己就不敢妄加判断了。
在网上学习了一会,自己归纳如下:(主要是感觉自己写的例子比网上的看起来快多了)
预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。条件编译有三种形式,下面分别介绍。
第一种形式
第一种形式的格式为:
#ifdef 标识符
程序段1
#else
程序段2
#endif
它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为:
#ifdef 标识符
程序段
#endif
例子:
<span style="font-size:24px;">#include <stdio.h> #define num 1 int main() { #ifdef num printf("已经宏定义"); #else printf("没有宏定义"); #endif getchar(); return 0; }</span>
因为num在第二行已经define所以条件编译只编译已经宏定义那部分。
故输出为已经宏定义。
第二种形式
第二种形式的格式为:
#ifndef 标识符
程序段1
#else
程序段2
#endif
与第一种形式的区别是将“ifdef”改为“ifndef”。它的功能是,如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。这与第一种形式的功能正相反。
这里就不再重复例子了。
第三种形式
第三种形式的格式为:
#if 常量表达式
程序段1
#else
程序段2
#endif
它的功能是,如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能。
注意这里是常量表达式,所以必须是define的而不是int因为这样是变量的。
例子:
<span style="font-size:24px;">#include <stdio.h> #define num 1 //常量为1 不为0 int main() { #if num printf("常量表达式不为0"); #else printf("常量表达式为0"); #endif getchar(); return 0; }</span>
显然结果为常量表达式不为0