我正在开发一个 C
项目,并且正在尝试使用可在 C++ 中使用的预处理器防护:
#ifndef CONFIG_H
#define CONFIG_H
... exciting stuff in C ....
#endif
在我的源代码中包含它似乎在 Visual Studio 中没有效果,因为当我在多个文件中包含给定文件(例如 Config.h
)时,编译器会给我以下错误:
1>main.obj : error LNK2005: _OPCodes already defined in lib.obj
1>main.obj : error LNK2005: _OPTotal already defined in lib.obj
1>main.obj : error LNK2005: _RegCodes already defined in lib.obj
1>main.obj : error LNK2005: _RegTotal already defined in lib.obj
1>main.obj : error LNK2005: _UDSTotal already defined in lib.obj
任何人都可以给我任何指示(没有双关语)吗?
最佳答案
守卫将防止在一个编译单元中定义两次。他们不会阻止在不同的编译单元中定义相同的东西。并且链接器消息表明发生了什么 _OPCodes
例如在 lib
和 main
中定义。
通常,一个头文件应该只有函数和全局变量的声明,相应的定义将在其中一个源文件中提供。
(有关更多信息,请参见例如 What is the difference between a definition and a declaration?)
关于c++ - C 预处理器防护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15918955/