C - 使用extern限定符

时间:2018-04-19 20:41:53

标签: c extern

我有以下三个文件。在头文件中,我声明了一个全局变量,并尝试使用extern访问其他文件。但我得到了链接器错误。

那么header1.h

  #ifndef HEADER1_H
  #define HEADER1_H

  #include<stdio.h>

  int g = 10;
  void test();

  #endif 

test.c的

  #include "header1.h"

  extern int g;

  void test()
  {
       printf("from print function g=%d\n", g);
  }

的main.c

  #include "header1.h"

  extern int g;

  int main()
  {
     printf("Hello World g=%d\n", g);
     test();
     getchar();
     return 0;
  }

链接错误:

  LNK2005   "int g" (?g@@3HA) already defined in main.obj   
  LNK1169   one or more multiply defined symbols found  

我对extern的理解是变量只能定义一次但可以多次声明。我想我这样跟着它 - 我在头文件中定义了全局变量g并试图在.c文件中访问它。

请你纠正我的理解吗?实际上导致链接器错误的是什么?我没多次定义g

1 个答案:

答案 0 :(得分:1)

您会收到多重定义错误,因为您将定义放在头文件中。因为两个源文件都包含头文件,导致在两个地方都定义g,因此出错。

您希望将声明放在头文件中,并将定义放在一个源文件中:

在header1.h中:

extern int g;

在test.c中:

int g = 10;

在main.c中没有任何内容。