MS Visual Studio 2010 c++预处理器-如果函数在宏中定义并在其他地方调用,当未定义时是否会有任何开

MS Visual Studio 2010 C++ Preprocessor - If function is defined in macro with calls elsewhere, is there any overhead hit when undefined

本文关键字:调用 方调用 任何开 是否 未定义 预处理 处理器 c++ 2010 Visual Studio      更新时间:2023-10-16

我有一个简短的问题,我确信有人问过这个问题,所以如果是重复的,我很抱歉。我试着搜索google和stackoverflow,但结果与我的问题无关。

的场景:

我有一个Visual Studio 2010项目配置,它定义了一个名为DBG的预处理器。在代码中,我有一个#ifdef DBG节,它在头文件中声明了一个函数签名(我们称之为writeToFile),并在cpp文件中的另一个#ifdef DBG/#endif节中定义了该函数。整个项目的其余部分都是对writeToFile的调用。

问题:

当项目在不同的配置(不定义DBG的配置)下编译时,编译器如何处理?我知道#ifdef/endif指令中的部分几乎被忽略了,但是对writeToFile的所有函数调用会发生什么?编译器也会忽略这些吗?或者在运行时,这些调用实际发生并且什么都不做吗?

Thanks in advance

我怀疑编译器应该抛出一个错误(未定义的函数writeToFile())。但是,您应该能够通过指定#else节来解决这个问题,该节使用空体定义了相同的函数。ie .

#ifdef DBG
  void fun() { cout << "hello"; }
#else
  void fun() { };
#endif //DBG
编辑:

我个人只会定义你想要的函数,并把#ifdef/#endif块在它的体内。