关于#if表达式感到困惑

时间:2016-02-14 23:09:55

标签: c

我正在使用Visual Studio 2015学习C.如果我创建一个全新的项目并执行除以下代码之外的任何内容:

#include <stdio.h>

int main()
{
#if abc == xyz
    printf("Expression is true.");
#else
    printf("Expression is false.");
#endif
}

应用程序打印出字符串Expression is true,这是我没想到的。我不期望这样工作的原因是因为我期待编译错误,因为abcxyz标记未在代码中的任何位置定义或声明。 所以问题是为什么这有效?

最后,如果我声明并定义abcxyz,如下所示:

int abc = 123;
int xyz = 456;

应用程序打印出字符串Expression is true?这看起来显然错了不是吗? 为什么如果我将变量声明并定义为具有不同值的整数,我会触发#if而不是#else?

谢谢。

1 个答案:

答案 0 :(得分:2)

我的建议是,至少在使用C的前几天(几周/几个月/几年?)中,不要使用预处理器#命令,除了

  1. #include库标题,
  2. 如果这些标题需要,请
  3. #define标记。
  4. 尝试使用预处理器执行任何其他操作并不值得付出努力和困惑。

    在这种情况下,请使用常规if语句:

    if ( abc == xyz ) {
        printf("Expression is true.");
    } 
    else {
        printf("Expression is false.");
    }