下面#ifdef的目的是什么?为什么它允许我在调试时(活动解决方案配置=调试)单步执行我的程序,但是当活动解决方案配置=发布时或构建解决方案和活动解决方案配置=发布时不能?
#ifdef RUN
int main(int argc, char* argv[])
{
Some functions
}
#endif
我正在使用其他人的遗留代码,我知道我可以删除它并且它会正常运行,但我想理解为什么前一个编码器首先将这些预处理器指令放在这里。
答案 0 :(得分:2)
回想一下,在链接的C程序中,只能有一个main()函数。
因此,如果要将其用作 library 代码,则需要关闭main(在预编译中删除)。
如果要独立运行,则应保留main。
它可能用于文件的测试用例。它也可能成为一个独立的服务器,其中库代码基本上仍然作为库代码运行,仅通过IPC而不是直接链接。
对我而言,这是不好的做法,反映了构建中的问题,C程序员比构建工程师更有能力,而构建工程师无法弄清楚如何正确地分离组件。需要重构。
在删除之前我会考虑以下内容:
#ifdef RUN
#error
作为打破构建的方法,如果您有意识地知道有时会定义标记,或者#ifndef
反之亦然。注意我说“考虑”;请先了解破坏构建的含义。答案 1 :(得分:1)
例如,只需要使用任何main
函数构建库时,该函数通常不需要任何main
函数。 main
函数用于测试某些内容。