C语言中的外部链接性

5
K&R说:
默认情况下,外部变量和函数具有这样的属性:它们被同名引用时,即使是从单独编译的函数中引用,也是指向同一个东西。
请解释一下这是什么意思,我不太理解。

4
请问,您是新手学习 C 语言吗?依我之见,《C 程序设计语言》并不适合入门者阅读。 - yehnan
然而,努力理解K&R将使您对C有很好的掌握。我建议继续努力。 - A. Levy
1
我并不反对这个问题。我注意到ashma已经问了几个问题。真诚地希望他/她能为自己选择更合适的书籍。 - yehnan
2个回答

5

Consider two functions:

extern int extern_sqr(int i) { return i * i; }
static int static_dbl(int i) { return i * 2; }

那么引用extern_sqr的人将会引用到这个函数。这与static链接相反,static_dbl函数只能在“翻译单元”(大致上是定义它的文件)内部访问。

事实证明,在C语言中,默认情况下隐含了extern。因此,如果您编写以下代码,则会得到相同的行为:

int extern_sqr(int i) { return i * i; }

较新的C标准仍需要“函数声明”,因此通常在某个头文件中会遇到以下代码:

int extern_sqr(int i);  // Note: 'i' is optional

这段话的意思是:“我在其他的翻译单元中有一个名为 extern_sqr 的函数。”

同样的逻辑也适用于变量。


1
你还可以补充一下,在函数声明中,变量名是可选的, 也就是你可能会看到这样的写法: int extern_sqr(int); - Maximus
1
@Maximus:已编辑,谢谢。根据不同的标准,参数类型也可以是完全可选的,但为什么要让事情变得更加复杂呢 :) - Stephen

0

外部变量和函数是全局的,即使从程序中的不同*.c文件调用,它们仍然保持相同的值(对于变量)或定义(对于函数)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接