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

gru*_*htr 0 c compiler-construction standards linker

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

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

  2. '全局'链接 - 链接时将所有符号名称放在一个包中.它使符号空间污染并没有必要(我认为它是c连接系统中的'设计bug')

C语言可能不强加"全局"链接,但链接器执行AFAIK

希望这个问题是合适的.这是关于c语言的,很清楚," C语言是否强加了全球链接方式? "

//编辑

据说下面C99强调了这一点.TNX的答案.

第一个c标准是否也强加了?我对这里的oryginal c创作者的意图非常好奇.(正如我所说,我认为全球链接是c语言中的一个坏选择)

Mat*_*Mat 5

从C99§6.2.2 标识符的链接

在构成整个程序的翻译单元和库的集合中,具有外部链接 的特定标识符的每个声明表示相同的对象或功能.在一个翻译单元内,具有内部链接的标识符的每个声明表示相同的对象或功能.没有链接的标识符的每个声明表示唯一的实体.

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

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

  • 上面的引用是针对外部链接案例的"整个程序",而不是一个翻译单元(我认为你所指的是"模块"一词).您可以使用_internal linkage_具有多个具有相同名称的符号,但这些符号仅在一个翻译单元中可见.C中没有与您描述的内容匹配的"本地链接". (2认同)