#if中定义的'+'的功能是什么?

Pan*_*ato 1 c

#include <stdio.h>

#define MIN 0

#if defined(MIN) + defined(MAX)

#define MAX 10

#endif

int main()

{

    printf("%d %d\n", MAX, MIN);

    return 0;

}  
Run Code Online (Sandbox Code Playgroud)

输出
10 0
是什么意思#if defined(MIN) + defined(MAX)
为什么它在#define MAX 10以后定义时有效?

unw*_*ind 6

defined操作者的计算结果为取决于符号是否被定义为0或1.

算术在预处理器表达式中起作用,1 + 0为1,因此#if采用.


das*_*ght 5

在这种情况下,它是相同的||:

#if defined(MIN) || defined(MAX)
    ...
#endif
Run Code Online (Sandbox Code Playgroud)

defined(...)操作者产生一个01整数,并且#if采取任何整数表达式,只要它可以在预处理的时间进行评价.

例如,+在预处理器条件下使用可以构建更有趣的构造

#if (defined(MIN) + defined(MAX) + defined(AVG)) >= 2
    ...
#endif
Run Code Online (Sandbox Code Playgroud)

这意味着" {MIN, MAX, AVG}定义了三个项目中的至少两个".