【发布时间】:2012-09-30 10:26:51
【问题描述】:
如果我们有一组模块(翻译单元) 符号可以通过两种方式链接:
'local' 链接 - 给定导出符号 'a' 可以链接到适当的模块 m1 和其他给定的 来自不同模块的符号“a”可以链接到其他模块 合适的模块 m2。用这种链接方式 即使两个模块使用相同也不会发生冲突 符号名称 - 它们不能链接到同一个 模块
'global' 链接 - 抛出所有符号名称 在链接时放在一个袋子里。它使符号空间污染 并且没有必要(我认为这是一个“设计错误” 在 c 链接系统中)
C 语言可能不会强加“全局”链接, 但链接器做AFAIK
希望这个问题是适当的。这是关于c语言的 很明显,“C 语言是否强加了全局链接方式 还是不行?”
//编辑
下面说 C99 强加了这一点。 TNX 来回答。
第一个 c 标准也强加了这个吗?我很好奇 关于原始 c 创作者的意图。 (就像我说的 我认为全局链接在 c 语言中是一个不好的选择)
【问题讨论】:
-
呃,C 并没有真正的命名空间,只有作用域,但除此之外,在大多数情况下,1 个标识符 == 1 个符号
-
C 被刻意设计为不对链接器施加超出 Fortran 要求的额外语义。
标签: c compiler-construction linker standards