2014-10-29 26 views
2

下面#ifdef的用途是什么?为什么它允许我在调试它的时候(主动解决方案配置=调试)而不是当活动解决方案配置=发布时,或者当构建解决方案和活动解决方案配置=发布时,通过我的程序?程序中main()之前#ifdef的用途

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

} 
#endif 

我与别人的遗留代码的工作,我知道我可以删除它,它会表现得正常,但我想知道为什么以前的编码器在第一时间在这里放置在这些预处理指令。

+0

最有可能在Visual Studio配置管理器中存在一个预处理器指令,该指令在调试但未发布的情况下定义了“RUN”,原因如下。检查此答案以了解如何设置预处理器指令:http://support.microsoft.com/kb/4045897/visual-studio-incorrectly-marking-inactive-code-blocks-when-using-ifdef – amdn 2014-10-29 21:27:57

回答

2

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

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

如果是独立运行,主要应在左边。

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

对我来说,这是不好的做法,反映了构建中的一个问题,C程序员比构建工程师更能胜任,他不知道如何正确分离组件。重构是必要的。

我会考虑取消之前如下:

  • 是他们测试的情况下? (如果是重构到正确的测试代码)
  • 是否运行系统中的任何地方实际上打开?如果是的话,为什么;如果不是更安全以便删除可能
  • 考虑#ifdef RUN#error作为一种方式来打破构建,如果它惊讶你学习国旗有时被定义,或#ifndef反之亦然。注意我说“考虑”;请理解首先破解构建的含义。
+0

RUN实际上从未实际打开系统。这不是一个“测试”案例,而是代码中其他地方存在的案例。 – traggatmot 2014-10-29 21:48:54

+1

@traggatmot可能值得尽你所能的去除代码。源代码控制与评论,对吗? – djechlin 2014-10-29 21:59:36

1

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

相关问题