相关疑难解决方法(0)

头文件中的变量定义

我对C和编译过程的基本知识最近变得生疏.我试图找出以下问题的答案,但我无法连接编译,链接和预处理阶段基础知识.快速搜索谷歌也没什么帮助.所以,我决定来到最终的知识来源:)

我知道:不应该在.h文件中定义变量.可以在那里宣布它们.

原因:因为头文件可能包含在多个位置,因此重新定义变量多次(链接器给出错误).

可能的解决方法:在头文件中使用header-guard并在其中定义变量.

它真的是一个解决方案:不.因为标题保护是用于预处理阶段.那就是告诉编译器这部分已经包含在内并且不再包含它.但是我们的多重定义错误来自链接器部分 - 在编译之后很久.

整件事让我对预处理和链接的工作方式感到困惑.如果已经定义了头部保护符号,我认为预处理将不包括代码.在那种情况下,不应该解决变量问题的多重定义吗?

这些预处理指令会在标题保护下重新定义编码过程,但是链接器仍会获得符号的多个定义,会发生什么?

c linker include-guards header-files c-preprocessor

24
推荐指数
4
解决办法
3万
查看次数

标签 统计

c ×1

c-preprocessor ×1

header-files ×1

include-guards ×1

linker ×1