首页 > 代码库 > 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