2

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

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

}
#endif

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

4

2 回答 2

2

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

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

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

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

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

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

  • 他们是测试用例吗?(如果是,重构为正确的测试代码)
  • RUN 是否在系统中的任何位置实际打开过?如果是,在哪里以及为什么;如果不更安全,可能会删除
  • #ifdef RUN #error如果您惊讶地发现有时定义了标志,则可以考虑作为一种破坏构建的方法,#ifndef反之亦然。注意我说的是“考虑”;请先了解破坏构建的含义。
于 2014-10-29T21:16:23.587 回答
1

例如,当只需要使用main通常不需要任何main功能的任何功能构建库时。该main函数用于测试某些东西。

于 2014-10-29T21:15:07.813 回答