【问题标题】:Error while referencing into a global variable using multiple files使用多个文件引用全局变量时出错
【发布时间】:2014-11-20 22:48:55
【问题描述】:

这些是我的代码文件:

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

发生了什么?

【问题讨论】:

    标签: c header global-variables extern


    【解决方案1】:

    bar 应该在文件范围内定义:

    #include <stdio.h>
    #include "header.h"
    
    int bar=0;
    
    int main(void) {
    ....
    

    【讨论】:

      【解决方案2】:

      当我输入:“发生了什么”时,讽刺的是,就在那时,我想出了答案:-P。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多