我有这段代码,但无法理解输出。有人可以帮助了解行为
#include<stdio.h>
int main(){
int a =1;
#if(a==0)
printf("equal");
#else if
printf("unequal");
#endif
return -1;
}
输出结果为 equal
。对我来说很奇怪。
此外,如果我将if
条件更改为a==2
,则输出 unequal
如果我尝试在'if'块内打印'a'的值,就像
一样#if(a==0)
printf("value of a: %d",a);
输出结果为 value of a: 1
请有人解释输出。
答案 0 :(得分:6)
预处理程序指令中的a
引用预处理程序定义,而不是程序中的变量。由于a
不是#define
d,因此对于0
,其值实际上为#if
。
答案 1 :(得分:3)
预处理程序指令(以#
开头的行)在编译时处理,而不是在运行时处理。 a
中的#if
与您声明的a
变量不同。预处理器只是用0
替换它,因为任何地方都没有#define a
语句。变量a
在您的程序中未使用。如果您执行使用它,就像在您显示的printf
语句中一样,它将按预期打印 - 您指定给它的值为1
。
答案 2 :(得分:3)
#include<stdio.h>
int main(){
int a =1;
#if(a==0)
printf("equal");
#else if
printf("unequal");
#endif
return -1;
}
传递给编译器的将首先通过preprocessor,然后将其输出作为输入发送给编译器;预处理器将发送
#include<stdio.h>
int main(){
int a =1;
printf("equal");
return -1;
}
到编译器,这就是你总是看到equal
的原因。原因是因为a
作为宏未定义,第一个条件为真,导致只将该语句传递给编译器。如果您尝试在include指令旁添加#define a 1
,那么您将始终将unequal
视为输出;但是这些更改只影响编译时宏a
而不影响运行时变量a
(两者完全不同)。
这一切都是因为预处理器只关注编译时结构。你真正需要的可能是
#include<stdio.h>
int main(){
int a =1;
if(a == 0)
printf("equal");
else
printf("unequal");
return 0;
}
旁白:当程序成功时返回0,从main返回负值通常意味着程序的某些错误状态终止。