c文件中外部变量的使用

Usage of extern variable in c files

我正在尝试使用 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 中定义它,然后在另一个文件中使用它。我的理解有什么问题吗?

int var = 4; <-- 你必须将其移出 func2().

就目前而言(您在 func2() 中声明了它,它仅在该函数中可见。

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

当你在函数内部声明一个变量时,它是一个局部变量。 它的范围将在该功能块中。当您使用 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