C中的静态关键字和外部变量

时间:2016-07-14 13:04:33

标签: c static global-variables external

我有以下代码,我在代码中的位置之后定义了几个外部(全局)变量,我需要使用它们。 为此,我使用关键字 extern 来声明它们而不为它们保留存储空间。

int main(int argc,char *argv[])
{

  extern int a;
  extern double b;

  /* ...use the variables somehow... */

{

int a = 10;
static double b = 2.0;

如果我这样做,编译器会抱怨我将b变量定义为静态(因此使用内部链接),之前我将其声明为extern。 但是如果我在使用它之前反转顺序并定义它并在main中声明它(这是我知道的otpional ...),就可以了。

static double b = 2.0;

int main(int argc,char *argv[])
{

  extern int a;
  extern double b;

  /* ...use the variables somehow... */

{

int a = 10;

那么如果我想在定义它之前使用外部私有变量(即内部链接)呢?这是禁止的吗?为什么?

1 个答案:

答案 0 :(得分:1)

extern关键字告诉编译器我们引用的变量位于不同的转换单元(基本上是另一个源文件),而static关键字表示变量(在全局变量)是当前翻译单元的本地变量,在其他源文件中无法看到,因此将两个关键字一起使用是没有意义的。

相同的文件中将b声明为全局后,它在main中可见,并且无需再次声明它,您只需使用它。 另一方面,如果它在不同的翻译单元中声明为全局变量,则必须使用extern关键字。