C预处理器条件语句输出

rog*_*hat 0 c c-preprocessor

我有这段代码,但无法理解输出.有人可以帮忙知道这种行为

#include<stdio.h>
int main(){

int a =1;
#if(a==0)
  printf("equal");
#else if
  printf("unequal");
#endif

return -1;
}
Run Code Online (Sandbox Code Playgroud)

输出出来了equal.对我来说很奇怪.

此外,如果我改变if条件a==2,输出来了unequal

如果我尝试在'if'块内打印'a'的值

#if(a==0)
 printf("value of a: %d",a);
Run Code Online (Sandbox Code Playgroud)

输出出来了 value of a: 1

请有人解释输出.

ric*_*ici 6

a在预处理指令是指预处理器定义,而不是在你的程序中的变量.既然a不是#defined,它的价值就是有效0#if.