我正在尝试使用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中定义它,然后在另一个文件中使用它。我的理解有什么问题?
答案 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
),您需要将其移出到其文件范围。