在c文件中使用extern变量

时间:2016-02-04 09:23:52

标签: c extern

我正在尝试使用4个文件为外部变量构建一个简单的测试用例。 文件如下

// header.h

#include <stdio.h>
void func1();
void func2();
extern int var;

// main.c中

#include "header.h"

int main()
{
    func2();
    func1();
    return 0;
}

// func1.c

#include "header.h"

void func1()
{
printf("I am in function 1\t var = %d", var);
return ;
}

// func2.c

#include "header.h"

void func2()
{
int var = 4;
     printf("I am function 2\n");
     return ;
}

我试图理解外部变量的概念。我将这些文件编译为

gcc -c main.c
gcc -c func1.c
gcc -c func2.c

将它们链接在一起

gcc -o main main.o func1.o func2.o

我说错误

func1.o: In function `func1':
func1.c:(.text+0x6): undefined reference to `var'

为什么?我在func2中定义它,然后在另一个文件中使用它。我的理解有什么问题?

2 个答案:

答案 0 :(得分:2)

当您在函数内声明变量时,它是一个局部变量。 它的范围将在该功能块中。当您使用extern关键字时,它会在全局部分中搜索变量。所以你必须将变量声明为全局变量。

#include "header.h"
int var = 4;
void func2()
{
   printf("I am function 2\n");
   return ;
}

输出将是,

 I am function 2
 I am in function 1  var = 4

答案 1 :(得分:1)

int var = 4;&lt; - 您必须将其移出func2()

就目前而言(你在func2()内宣布它,它只在该函数中可见。

要使其在其他编译单元上可见(通过extern),您需要将其移出到其文件范围。