使用多个文件引用全局变量时出错

时间:2014-11-20 22:48:55

标签: c header global-variables extern multiple-files

这些是我的代码文件:

header.h

#ifndef HEADER_H
#define HEADER_H
extern int bar;
#endif

foo.c的

#include <stdio.h>
#include "header.h"

void foo(void) {
    printf("foo: bar = %d\n", bar);
    printf("foo: ++bar = %d\n", ++bar);
}

的main.c

#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 代码。 这就是我在这里所做的,但我得到了这个错误。

发生了什么事?

2 个答案:

答案 0 :(得分:0)

应在文件范围中定义

bar

#include <stdio.h>
#include "header.h"

int bar=0;

int main(void) {
....

答案 1 :(得分:0)

当我打字时:“发生了什么事”,讽刺的是,我找到了答案:-P。

问题是我在main函数中定义变量。因此,定义范围限制在括号之间。