c - c文件中外部变量的使用

标签 c extern

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

//header.h

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

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

最佳答案

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

关于c - c文件中外部变量的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35197073/

相关文章:

c - 通过在编译时替换静态符号来测试嵌入式代码

c - pthread_setname_np() 设置功能时

c++ - 将我的对象声明为 extern 会出现 "not declared in this scope"错误

c++ - 在 C++ 中对用户定义的类型使用 extern 关键字

c - 设置指向空段错误的指针

编译器声称指针在未使用时为 const

c - 函数原型(prototype)声明

c - 外部声明和全局范围

c - 在 C 的另一个模块中声明 extern 数组

c++ - 如何检查dll/lib中的函数在windows中是否为extern "C"?