c语言预处理 “条件编译”


条件编译简介

通常情况下,我们编译一个程序会将所有的源代码行都进行编译,
但有时候,我们希望根据不同的条件编译生成不同的文件,
例:不同cpu 调用不同的文件进行编译 或引入不同的头文件
或我们设置当前模式为“调试模式”,需要生成调试模式(带日志模式)的可执行文件。
条件编译也是以#开头

条件编译 形式一

形式一:
#if 表达式
程序段1
#else
程序段2
#endif
当表达式为真时,编译程序段1,否则编译程序段2。
例:
#include “stdio.h”
#define max 0

int main(){
int a=10;
int b =20;
int c =0;
#if max
c= b>a?b:a;
printf(“输出 %d ,%d 中的最大值:%d\n”,a,b,c);
#else
c =a>b?b:a;
printf(“输出 %d ,%d中的最小值:%d\n”,a,b,c);
#endif
return 1;
}
//如上图所示:如果max为真时 ,则编译输出最大值的部分,否则编译输出最小值的部分。


条件编译 形式二

形式二:
#ifdef 宏名
程序段1
#else
程序段2
#endif
//形式2的作用是判断宏名是否被定义,如果被定义,则编译程序段1 ,否则编译程序段2
例:
#include “stdio.h”
void main()
{
int a=10;
#ifdef AAA
printf(“计算乘积%d\n”,a*AAA);
#else
printf(“宏未定义无法进行相关计算!”);
#endif
}


条件编译 形式三

形式三:
#ifndef 宏名
程序段1
#else
程序段2
#endif
//形式三的与形式二的区别在于ifndef 代表宏未定义编译程序段1 ,否则编译程序段2。