为什么ifndef / endif之间的代码仍然可以在这里运行?

时间:2010-07-18 14:33:25

标签: c++ syntax

#define cimg_use_jpeg 2

#ifndef cimg_use_jpeg

//code goes here

#endif

我真的不明白......

5 个答案:

答案 0 :(得分:6)

每次发生与此类似的事情(所谓的不可能的事情)时,原因是:我在编辑器中看到的代码不是运行的代码。这可能在很多方面发生。

  • 忘记制作
  • 忘记保存
  • 保存代码副本
  • 在与编译到
  • 的环境不同的环境中运行
  • 新代码已经运行,但我打开并正在查看旧输出

答案 1 :(得分:1)

无法执行。也许你运行不正确的可执行版本打印__DATE____TIME__以跟踪或记录有助于检测此类错误。

答案 2 :(得分:0)

要么你写

#define yoursymbol

#ifdef yoursymbol

或者你写

#define yoursymbol somevalue

#if yousymbol == somevalue

不要混合它们

编辑: 因为人们似乎误解了我的意思,这是一个澄清:当你编程时,重要的是编码,以便其他人理解你的意图是什么,所以如果你的意图只是检查一个符号是否被定义,那么指定一个数字会很困惑值。

答案 3 :(得分:0)

这应该像你期望的那样有效。假设#ifndef/#endif被定义为预期,编译器甚至不会编译cimg_use_jpeg块中的代码。

所以问题是,cimg_use_jpeg是否按预期定义了?或者您是否正在简化您的问题,并通过简化提供实际可行的样本?

答案 4 :(得分:0)

@Anders K.这是有效的,即不执行正确的事情。代码产生“BAZ未定义”

#define FOO 2
#define BAR

int main(int argc, char* argv[])
{
#ifndef FOO
  std::cout << "FOO is undefined" << std::endl;
#endif

#ifndef BAR
  std::cout << "BAR is undefined" << std::endl;
#endif

#ifndef BAZ
  std::cout << "BAZ is undefined" << std::endl;
#endif
}