Tag: 包含防护

头文件中的变量定义

我对C和编译过程的基本知识最近变得生疏。 我试图找出以下问题的答案,但我无法连接编译,链接和预处理阶段基础知识。 快速搜索谷歌也没有多大帮助。 所以,我决定来到最终的知识来源:) 我知道:不应该在.h文件中定义变量。 可以在那里宣布它们。 原因:因为头文件可能包含在多个位置,因此重新定义变量多次(链接器给出错误)。 可能的解决方法:在头文件中使用header-guard并在其中定义变量。 它真的是一个解决方案:不。因为标题保护是用于预处理阶段。 那就是告诉编译器这部分已经包含在内并且不再包含它。 但是我们的多重定义错误出现在链接器部分 – 在编译之后。 整件事让我对预处理和链接的工作方式感到困惑。 如果已经定义了头部保护符号,我认为预处理将不包括代码。 在那种情况下,不应该解决变量问题的多重定义吗? 这些预处理指令会在标题保护下重新定义编码过程,但链接器仍会获得符号的多个定义,会发生什么?