存储类默认全局变量(gcc编译器)?

时间:2016-11-01 08:21:48

标签: c variables gcc storage-class-specifier

在C,(GCC编译器)中,全局变量的默认存储类是什么?

让我分享一个代码,例如:

int i; 

void f()
{ --statements--}

main()
{ --- set of statements--- }

如果我说变量i是静态的而不是外部的,我是否正确?

2 个答案:

答案 0 :(得分:6)

在此代码中,i具有静态存储持续时间外部链接

存储持续时间是指变量存储的生命周期。 静态存储持续时间表示该变量在程序的整个生命周期内都存在。

链接是指名称和对象之间的关系。 外部链接表示具有外部链接的名称的所有实例都表示相同的对象。您的int i;将与另一个翻译单元的声明extern int i;匹配。

关键字static在不同的上下文中用作存储持续时间说明符和链接说明符,因此不清楚变量是否为static。相反,应该考虑变量的存储持续时间和链接。

答案 1 :(得分:1)

对于在任何函数之外声明的变量,您有以下情况:

static int variableWithfileScope;  // Not exported. Only visible in current file.

int globalVariableThatIsExported;  // Exported. 

// Forward declaration. No variable defined.
extern int globalVariableThatIsDefinedSomewhereElse;  

这是由标准定义的,适用于所有C编译器。