如果我用静态声明全局变量,我有一个疑问。
static int a=5;
main()
{
func();
}
可以使用extern在另一个file2.c中访问吗?
func()
{
extern int a;
printf(a);
}
或只有没有静态声明的全局变量可以使用extern访问吗?
答案 0 :(得分:13)
没有!
static
将变量的范围限制为相同的 translation unit
static
为变量提供了 Internal Linkage ,并且在创建的翻译单元之外无法访问此变量。
如果您需要访问不同文件中的变量,只需删除static
关键字。
答案 1 :(得分:4)
没有。 file1.c中的a
用内部链接命名变量。从不同的翻译单元使用的相同名称将引用不同的变量。这可能还有内部链接,或者它可能(如本例所示)具有外部链接。
在同一个文件中,你可以引用一个带有内部链接和extern
的文件范围变量。
static int a;
int main(void) {
extern int a; // still has internal linkage
printf("%d\n", a);
}
答案 2 :(得分:2)
这似乎是对静态的两个含义的误解: