首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的extern变量尚未初始化?

extern变量是一种在C语言中使用的关键字,用于声明一个全局变量,该变量的定义和初始化在其他文件中进行。当我们在一个文件中使用extern关键字声明一个变量时,编译器会知道该变量是在其他文件中定义的,并且在链接阶段将其与实际定义的变量关联起来。

如果你的extern变量尚未初始化,可能有以下几个原因:

  1. 变量定义在其他文件中,但是在当前文件中没有包含对应的头文件。在使用extern关键字声明变量之前,需要包含定义该变量的头文件,以便编译器知道该变量的类型和名称。
  2. 变量定义在其他文件中,但是在链接阶段没有正确地将其与实际定义的变量关联起来。这可能是由于编译器或链接器配置错误导致的。可以检查编译器和链接器的配置,确保正确地链接所有的源文件。
  3. 变量定义在其他文件中,但是在当前文件中没有正确地使用extern关键字声明该变量。在使用extern关键字声明变量时,需要确保变量的类型和名称与实际定义的变量一致。

总结起来,如果你的extern变量尚未初始化,可能是由于头文件未包含、链接配置错误或者声明错误导致的。需要仔细检查代码,并确保正确地声明和定义extern变量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • C++ 温习笔记(2) - extern,预处理命令#pragma,static

    extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 在一个源文件里定义了一个数组:char a[6];   在另外一个文件里用下列语句进行了声明:extern char *a;   请问,这样可以吗?   答案与分析:   1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。   2)、例子分析如下,如果a[] = “abcd”,则外部变量a=0x61626364 (abcd的ASCII码值),*a显然没有意义   显然a指向的空间(0x61626364)没有意义,易出现非法内存访问。   3)、这提示我们,在使用extern时候要严格对应声明时的格式,在实际编程中,这样的错误屡见不鲜。   4)、extern用在变量声明中常常有这样一个作用,你在.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在.h中并用extern来声明。

    01

    申明与定义的区别

    C++编码过程中,我们经常谈及“定义”和“声明”,二者是编程过程中的基本概念。我们需要使用一个变量、类型(类、结构体、枚举、共用体)或者函数时,我们需要提前定义和申明。定义和申明的过程,就像我们向图书馆借阅书籍一般,需要先完成书籍的印刷,即创造出书籍,这是一个定义的过程,有了书籍,我们需要到图书馆完成借阅的登记手续,这是申明的过程。完成了申明,我们有了使用书籍的权限,就可以尽情的畅游在知识的海洋。如果说书籍是自己委托印刷厂印刷的,那么你无需向他人借阅,即无需声明,可以直接使用书籍。一本书籍只需要印刷一次,但是可以被多人多次借阅,也就是说定义只需要一次,但是申明可以有多次。这里的书籍指代的是“定义”和“声明”作用的对象,即变量、类型和函数。C/C++中,使用一个变量、类型或者函数必须先在使用前完成定义和申明。

    02
    领券