在c ++中包含用于main方法的保护

时间:2012-02-03 18:27:50

标签: c++

我知道C ++中.h文件中包含防护的目的和用法

  #ifndef FILENAME_H
  #define FILENAME_H
  #endif

但是,我试图了解测试存根中的#ifdef TEST_FILENAME或用于测试运行类的main()方法的用法。

  #ifdef TEST_FILENAME
   void main()
   {
      /////////////////
   }
  #endif

2 个答案:

答案 0 :(得分:3)

这可能是你可以运行条件主函数。

如果您正在测试,则需要运行测试例程,否则您可能希望执行实际的主函数。这允许您在编译时定义宏,以便预处理器可以为您提供正确的主体来构建。

答案 1 :(得分:1)

程序只能有一个main()入口点。

因此,如果此测试代码位于将被编译并链接到您的发行版可执行文件的文件中,则需要对其进行条件化,以便仅在特殊的测试版本中编译,否则您的构建将因链接错误而失败to main()被多重定义。

一般来说,这是构建测试代码的一种不好的方法 - 测试应该在与生产代码分开的结构合理的单元测试中进行。