#ifdef 和未声明的标识符

#ifdef and undeclared identifier

本人2017年Visual Studio开发一个项目,代码如下:

#ifdef MY_DEFINE
#else
    std::string txt = "abc";
#endif

output += txt;

不编译 - 我得到一个错误:'txt': undeclared identifier

MY_DEFINE没有定义,else分支被编译。该代码是更大项目的一部分。我无法在默认的简单控制台应用程序中重现该编译错误。这是否意味着该项目可能有一些导致编译错误的设置?

您可以使用 #error 指令检查实际发生的情况:

#ifdef MY_DEFINE
#error It was defined
#else
#error It was NOT defined
    std::string txt = "abc";
#endif

output += txt;

可能 MY_DEFINE 实际上是在您包含的其他一些头文件中定义的。通常在 Visual Studio 中确定这一点的最简单方法就是将鼠标光标悬停在标识符上并查看它的内容,或者 ctrl+click 转到定义。但是有时 IDE 中的这些提示与您编译时发生的情况并不完全匹配。