程序中main()之前#ifdef的用途

时间:2014-10-29 21:11:49

标签: c++ main ifdefine

下面#ifdef的目的是什么?为什么它允许我在调试时(活动解决方案配置=调试)单步执行我的程序,但是当活动解决方案配置=发布时或构建解决方案和活动解决方案配置=发布时不能?

#ifdef RUN
int main(int argc, char* argv[])
{
   Some functions

}
#endif

我正在使用其他人的遗留代码,我知道我可以删除它并且它会正常运行,但我想理解为什么前一个编码器首先将这些预处理器指令放在这里。

2 个答案:

答案 0 :(得分:2)

回想一下,在链接的C程序中,只能有一个main()函数。

因此,如果要将其用作 library 代码,则需要关闭main(在预编译中删除)。

如果要独立运行,则应保留main。

它可能用于文件的测试用例。它也可能成为一个独立的服务器,其中库代码基本上仍然作为库代码运行,仅通过IPC而不是直接链接。

对我而言,这是不好的做法,反映了构建中的问题,C程序员比构建工程师更有能力,而构建工程师无法弄清楚如何正确地分离组件。需要重构。

在删除之前我会考虑以下内容:

  • 他们是测试案例吗? (如果是,则重构为正确的测试代码)
  • 是否曾在系统中的任何地方实际运行?如果是的地方和原因;如果不是更安全,可能删除
  • 考虑#ifdef RUN #error作为打破构建的方法,如果您有意识地知道有时会定义标记,或者#ifndef反之亦然。注意我说“考虑”;请先了解破坏构建的含义。

答案 1 :(得分:1)

例如,只需要使用任何main函数构建库时,该函数通常不需要任何main函数。 main函数用于测试某些内容。