#ifdef是不是不能和#elif连用?

若能连用,
为什么还要有defined运算符?defined有没有不能用#ifdef来代替的功能?
最新回答
xx会魔法

2023-03-17 04:09:58

#ifdef和#elif是可以连用的。#ifdef和#elif连用,语法和if...else if语句一样。

条件编译区域以 #if、#ifdef 或 #ifndef 等命令作为开头,以 #endif 命令结尾。条件编译区域可以有任意数量的 #elif 命令,但最多一个 #else 命令。

#if defined的使用

#if defined (宏)代码.#endif

这个#if后面接的是一个宏,意思是前面的宏定义里面有没有定义这个宏,如果定义了,编译器就会编译中间的代码,如果没有定义,那就不会编译,不管这个宏定义的是什么东西,对不对等。

#ifdef的使用

ifdef的使用和#if defined()的用法是一样的。

ifndef又和#if !defined()的用法一样(取反的意思)。

扩展资料

#if 和 #elif 命令

作为 #if 或 #elif 命令条件的表达式,必须是整数常量预处理器表达式。这与普通的整数常量表达式不同,主要区别在于:

(1) 不能在 #if 或 #elif 表达式中使用类型转换运算符。

(2) 可以使用预处理运算符 defined。

(3) 在预处理器展开所有宏,并且计算完所有 defined 表达式之后,会使用字符 o 替换掉表达式中所有其他标识符或关键字。

(4) 表达式中所有带符号值都具有 intmax_t 类型,并且所有无符号值都具有 uintmax_t 类型。字符常量也会受该规则的影响。intmax_t 和 uintmax_t 定义在头文件 stdint.h 中。

(5) 预处理器会把字符常量和字符串字面量中的字符与转义序列转换成运行字符集中对应的字符。然而,字符常量在预处理器表达式和在后期编译阶段是否具有相同的值,取决于实现版本。

献世佛

2021-07-06 23:59:04

可以的。

#ifdef和#elif都是C/C++条件编译的标识符。二者可以连用。

如以下代码:

#ifdef TEST0
int a = 1;
#elif TEST1
int a=2;
#else
int a=3;
#endif


这段代码在C/C++中是合法的。根据宏定义情况,会有如下几种可能:


1 TEST0被定义,那么,全局变量a会被初始化为1;同时条件编译其它部分代码将被忽略。

2 如果TEST0没有被定义,会判断TEST1的值。如果TEST1被定义,且值非0,那么a会被初始化为2。

3 如果以上均未满足,会编译#else部分,a被初始化为3。

猫街少女

2022-06-15 07:27:22

#ifdef和#elif可以连用,语法和if...else if语句一样

defined的优点是在可用在处理判断多个条件是否成立时,例如:

#if defined(__unix__) && defined(__GNUC__)
.....
#endif

如果上例用#ifdef完成,就要进行嵌套,显然可读性不如这样做。
蜡笔小心

2023-03-07 12:16:30

关于defined,那位朋友说了....

---------------
能.
#ifdef _DEBUG
#define _OK
#elif
#define _NG
#endif
做作给谁看ペ

2023-05-12 14:43:51

得改成 #elif defined(XXX)