#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;
}
输出
10 0
#if defined(MIN) + defined(MAX)
的含义是什么?
为什么以后定义#define MAX 10
时它会起作用?
答案 0 :(得分:6)
The defined
operator的计算结果为0或1,具体取决于是否定义了符号。
算术在预处理程序表达式中起作用,1 + 0为1,因此#if
被采用。
答案 1 :(得分:5)
在这种情况下,它与||
:
#if defined(MIN) || defined(MAX)
...
#endif
defined(...)
运算符生成0
或1
整数,#if
采用任何整数表达式,只要可以在预处理时对其进行求值。 / p>
在预处理器条件中使用+
可以构建更有趣的构造,例如
#if (defined(MIN) + defined(MAX) + defined(AVG)) >= 2
...
#endif
这意味着&#34;三个项目{MIN, MAX, AVG}
中至少有两个被定义为&#34;。
答案 2 :(得分:3)
您可以在预处理器中进行简单的数学运算。 #if defined(...)
的计算结果为整数0或1。 defined(MIN)
为1
,而defined(MAX)
为0
,因此整个表达式的结果为1 = true
,MAX
已定义。