gpt4 book ai didi

c - C语言是否强加了全局链接?

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:15 25 4
gpt4 key购买 nike

如果我们有一组模块(翻译单元)符号可以通过两种方式链接:

  1. “本地”链接 - 给定导出符号“a”可以链接到适当的模块 m1 和其他给定的来自不同模块的符号'a'可以链接到其他适当的模块 m2。通过这种链接方式即使两个模块使用相同的也不会发生冲突符号名称 - 它们不能链接到相同的模块

  2. “全局”链接 - 抛出所有符号名称在链接时放在一个袋子里。它使符号空间污染并且没有必要(我认为这是一个“设计错误”在 C 链接系统中)

C 语言可能不强加“全局”链接,但是链接器做 AFAIK

希望这个问题是恰当的。这是关于c语言的很明显,“C 语言是否强加了全局链接方式还是不是?

//编辑

下面说 C99 强加了这一点。 TNX 求解答。

第一个 c 标准是否也强制要求这样做?我很好奇关于原始 C 创作者的意图在这里。 (就像我说的我认为全局链接在 C 语言中是一个糟糕的选择)

最佳答案

来自 C99 §6.2.2 标识符的链接

In the set of translation units and libraries that constitutes an entire program, each declaration of a particular identifier with external linkage denotes the same object or function. Within one translation unit, each declaration of an identifier with internal linkage denotes the same object or function. Each declaration of an identifier with no linkage denotes a unique entity.

你在谈论带有外部链接的符号,所以不,你不能在整个程序中拥有多个这样的东西。

至于您提出的“本地链接”,如果有多个名称完全相同的东西,编译器或链接器将如何知道要绑定(bind)哪个符号?

关于c - C语言是否强加了全局链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12660528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com