我有以下三个文件。在头文件中,我声明了一个全局变量,并尝试使用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
。
答案 0 :(得分:1)
您会收到多重定义错误,因为您将定义放在头文件中。因为两个源文件都包含头文件,导致在两个地方都定义g
,因此出错。
您希望将声明放在头文件中,并将定义放在一个源文件中:
在header1.h中:
extern int g;
在test.c中:
int g = 10;
在main.c中没有任何内容。