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