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