一.概述
如果我们希望程序的其中一部分代码只有满足一定条件时才进行编译,条件不成立不参与编译(参与编译的代码才能够执行),这就是条件编译。
二.用法:
条件编译以 # 开头的,跟判断语句很相似,但不一样.
#if 条件一 //编译代码 #elif 条件二 //编译代码 #else //编译代码 #endif
1.如果条件1,成立,那么编译器就会把 #if 与 #elif 之间的代码编译进去(记住是编译,不是执行.)。
2.如果条件1不成立,条件二成立,那么就会把 #elif 与 #else 之间的代码编译进去
3.如果条件1、2都不成立,那么执行 #else 与 endif之间的代码编译进去.
4.注意:条件编译结束后,要在最后面加一个 #endif ,不然后果很严重(作者本人入坑过) .
跪在这很久....(基础不扎实)
5.#if 和 #elif 后面的条件一般是判断 宏定义 而不是判断变量。因为条件编译是在编译之前做的判断,宏定义也是编译之前定义的,而变量是在运行时才产生的、才有使用的意义。
简单例子,方便演示:
#include <stdio.h> #define MAX 11 int main() { #if MAX == 0 printf("MAX是0"); #elif MAX > 0 printf("MAX大于0"); #else printf("MAX小于0"); #endif return 0; }
其实编译预处理后的代码是这样的:
int main() { printf("MAX大于0"); return 0; }
三.判断定义过的宏
1.#if defined() 和 #if !defined() 的用法
如果前面定义了MAX这个宏,就执行编译代码.
#if defined(MAX) //代码 #endif
如果前面没有定义过MAX这个宏,就执行代码:
#if !defined(MAX) //代码 #endif
2.#ifdef 和 ifndef 的使用
这个用法,是用法一的省略形式,跟用法一基本一致。
如果前面已经定义了MAX这个宏,就将代码编译.
#ifdef MAX //代码 #endif