C - extern 限定符的用法
C - usage of extern qualifier
我有以下三个文件。在头文件中,我声明了一个全局变量并尝试使用 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
。
你得到一个多重定义错误,因为你把定义放在了头文件中。因为两个源文件都包含头文件,所以导致 g
在两个地方都被定义,因此出现错误。
您想将声明放在头文件中,将定义放在一个源文件中:
在header1.h中:
extern int g;
在test.c中:
int g = 10;
main.c.
中什么也没有
我有以下三个文件。在头文件中,我声明了一个全局变量并尝试使用 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
。
你得到一个多重定义错误,因为你把定义放在了头文件中。因为两个源文件都包含头文件,所以导致 g
在两个地方都被定义,因此出现错误。
您想将声明放在头文件中,将定义放在一个源文件中:
在header1.h中:
extern int g;
在test.c中:
int g = 10;
main.c.
中什么也没有