在有些情况下,我们需要程序在满足某些条件的时候才进行编译(只有参与编译的代码才能够被执行)。那么C语言中的条件编译正好是做这个事的,那就是条件编译。

    一、基本用法

    #if condition1
    	...code1...
    #elif condition2
    	...code2...
    #else
    	...code3...
    #endif

    如果condition1成立,那么就编译code1,否则判断condition2是否成立,成立的话就编译code2,否则就编译code3。

    需要注意的是#if和#endif是配对使用的;#if里面判断的条件一般是宏定义的条件,而不是变量的条件。

    因为条件编译是在代码编译之前执行的,宏定义也是在编译之前执行的,而变量实在运行时才变得有意义。

     

    二、举例

    #include <stdio.h>
    #define MAX 5
    int main()
    {
    #if MAX==0
    	printf("输出0\n");
    #elif MAX==5
    	printf("输出5\n");
    #else
    	printf("输出其他\n");
    #endif
    	return 0;
    }
    

    这里定义了宏MAX的值是5,在实际的开发中这个宏一般情况下会被定义到头文件中,为了演示方便就写到一个文件中。

    由于MAX的值是5所以#elif MAX==5成立,printf("输出5");将被编译。然后编译预处理后的代码其实是这样的:

    int main()
    {
    	printf("输出5\n");
    	return 0;
    }

    三、其他用法

    1.#if defined()和#if !defined()的用法

    #if  #elif后面的条件不仅仅可以用来判断宏的值,还可以判断是否定义过某个宏。就可以使用 #if defined()和#if !defined()来判断是否定义过每个宏。

    例如:

    #include <stdio.h>
    
    #define sum(v1,v2) ((v1)+(v2))
    
    #define MAX 5
    int main()
    {
    	int c;
    
    #if defined(sum)
    	c = sum(1,4);
    #else
    	c = 1 + 3;
    #endif
    	
    	printf("%d\n",c);
    	return 0;
    
    }

     

    2.#ifdef和#ifndef可以说是#if defined()和#if !defined()的简化版本
    #include <stdio.h>
    
    #define sum(v1,v2) ((v1)+(v2))
    
    #define MAX 5
    int main()
    {
    	int c;
    
    #ifndef sum
    	c = 1 + 3;
    #else
    	c = sum(1, 4);
    #endif
    	
    	printf("%d\n",c);
    	return 0;
    
    }
    
     

    .