这些是我的代码文件:
#ifndef HEADER_H
#define HEADER_H
extern int bar;
#endif
#include <stdio.h>
#include "header.h"
void foo(void) {
printf("foo: bar = %d\n", bar);
printf("foo: ++bar = %d\n", ++bar);
}
#include <stdio.h>
#include "header.h"
int main(void) {
int bar=0;
printf("main: bar = %d\n", bar);
printf("main: ++bar = %d\n", bar);
foo();
return 0;
}
当我尝试在Ubuntu中编译它们时:
gcc -c foo.c
gcc main.c foo.o -o program
我从链接器收到此错误:
/tmp/ccWHhwtm.o: In function `foo':
foo.c:(.text+0x6): undefined reference to `bar'
foo.c:(.text+0x1d): undefined reference to `bar'
foo.c:(.text+0x26): undefined reference to `bar'
foo.c:(.text+0x2c): undefined reference to `bar'
collect2: error: ld returned 1 exit status
正如我从其他已回答的问题中看到的那样,为了将全局变量共享到多个文件,您只需使用extern
关键字在头文件中声明该变量,并在其中一个中定义 .c 代码。
这就是我在这里所做的,但我得到了这个错误。
发生了什么事?
答案 0 :(得分:0)
bar
:
#include <stdio.h>
#include "header.h"
int bar=0;
int main(void) {
....
答案 1 :(得分:0)
当我打字时:“发生了什么事”,讽刺的是,我找到了答案:-P。
问题是我在main
函数中定义变量。因此,定义范围限制在括号之间。