文章目录
- 一、常见的条件编译指令
- 二、条件编译指令的用法
- 1、#if,#elif,#else与#endif
- 2、#ifdef与#endif
- 3、#ifndef与#endif
一、常见的条件编译指令
1、#if:如果条件为真,则执行相应的操作。
2、#elif:类似于 elseif 的用法,当前面条件为假,再判断该条件是否为真,如果是真,则执行相应操作。
3、#else:如果前面所有条件均为假,则执行相应操作。
4、#ifdef:如果该宏已定义,则执行相应操作。
5、#ifndef:如果该宏没有定义,则执行相应操作。
6、#endif :结束对应的条件编译指令。(不能省略)
二、条件编译指令的用法
1、#if,#elif,#else与#endif
首先上代码
#include <stdio.h>
#define JUD1 1
#define JUD2 0
int main()
{
int a = 0;
#if JUD1
printf("%d\n", a + 1);
#elif JUD2
printf("%d\n", a + 2);
# else
printf("%d\n", a + 3);
#endif
return 0;
}
调用格式为:
#if 条件判断1
代码段1
#elif 条件判断2
代码段2
#else
代码段3
#endif
上述代码通过运行可以发现输出了1,其中#if会首先判断JUD1是否为真(非0),如果是真就会执行相应操作,然后跳到#endif。但如果不是真或者JUD1未定义就会跳到第二个判断条件处再进行判断,如果为假则判断下一个条件。#elif和#else可以按照需求增删,需要注意的是只会选择一条操作执行,且如果对应条件未定义则为假。
2、#ifdef与#endif
#ifdef与#endif主要功能是判断是否定义了该标识符,若果定义了就会执行相应操作(即使该标识符为假也会执行相应操作)。
其调用格式为:
#ifdef 标识符名
代码段
#endif
对应代码为:
#include <stdio.h>
//#define JUD
int main()
{
int a = 0;
#ifdef JUD
printf("%d\n", a + 1);
#else
printf("%d\n", a + 2);
#endif
return 0;
}
上述代码最终输出的是2,因为JUD并没有定义,所以不会执行#idedf,执行的是#else所以最终结果为2。
3、#ifndef与#endif
#ifndef和#endif的功能与#ifdef和#endif的功能类似,是用于判断是否定义了该标识符, #ifndef表示的是如果没有定义标识符则会进行相应操作。
其调用格式为:
#ifndef 标识符名
代码段
#endif
- 值得一提的是#ifndef还能用于检测到没有定义标识符时对其进行定义。
其调用格式为:
#ifndef 标识符名
代码段1
#define 定义标识符
代码段2
#endif
当未定义标识符时会执行代码段1,然后对标识符进行定义然后执行代码段2。反之如果已经定义了标识符则不会执行代码段1和代码段2。
代码如下
#include <stdio.h>
//#define JUD
int main()
{
int a = 0;
#ifndef JUD
printf("%d\n", a + 1);
#define JUD 2
printf("%d\n", JUD);
#endif
return 0;
}
最终输出的结果是1和2。