K&R说:
默认情况下,外部变量和函数具有这样的属性:它们被同名引用时,即使是从单独编译的函数中引用,也是指向同一个东西。
请解释一下这是什么意思,我不太理解。
默认情况下,外部变量和函数具有这样的属性:它们被同名引用时,即使是从单独编译的函数中引用,也是指向同一个东西。
请解释一下这是什么意思,我不太理解。
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
的函数。”
同样的逻辑也适用于变量。
外部变量和函数是全局的,即使从程序中的不同*.c文件调用,它们仍然保持相同的值(对于变量)或定义(对于函数)。