在我的项目中,我有一个头文件 common.h,其中包含许多头文件。其中一些文件包括 Common.h 和 Common .h 中已经存在的一些其他头文件,因此在预处理阶段,许多函数被原型化了两次(一次来自包含的标题和来自 Gui.h 的其他)。我想知道从长远来看这会导致任何问题。
请建议..提前谢谢..
在我的项目中,我有一个头文件 common.h,其中包含许多头文件。其中一些文件包括 Common.h 和 Common .h 中已经存在的一些其他头文件,因此在预处理阶段,许多函数被原型化了两次(一次来自包含的标题和来自 Gui.h 的其他)。我想知道从长远来看这会导致任何问题。
请建议..提前谢谢..
标头应该包含守卫,以便它们只被处理一次:
#ifndef SOME_UNIQUE_STRING
#define SOME_UNIQUE_STRING
// Everything else here
#endif
“一切”我的意思是“一切”,#include
如果有的话,从你的 s 开始。
SOME_UNIQUE_STRING 可以是模块的名称,只要它不太可能与其他地方的另一个定义一致。
如果你查看你的库头文件,你会注意到他们使用了像这样的包含守卫。
正如 Chemistpp 建议的那样,
#pragma once
是一个不错的尝试选择,尽管它是非标准的。
查看链接中列出的优点和缺点。