extern声明的变量将在哪里定义?

开瓶器

我知道(我坚信)变量声明和定义之间的区别。我只是想知道将在哪里(在哪个对象中)定义一个变量,该变量是使用extern链接声明的(在头文件中),并且将此头文件包含在使用该变量的许多源文件中。我提到很少的声明和定义链接找不到有关此的信息。

//globalheader.h//

extern int test_var;

//file1.c//
#include "globalheader.h"

static fn1();
fn1
{
   int a;
   a = test_var;
}

//file2.c//
#include "globalheader.h"

static fn2();
fn2
{
   int b = 1;
   test_var = b;
}

在上面的代码中,test_var是使用globalheader.h中的外部链接声明的,该文件包含在file1.c和file2.c中。没有在哪里定义并使用此test_var,那么该test_var将在哪里(在哪个目标文件中)分配内存?

我们

您的test_var位置未定义,因此它不会存在于任何目标文件中,并且会显示链接器错误,指出test_var如果执行链接会丢失该链接器。

您有责任在一个编译单元中对其进行定义,并且它将在您决定的任何目标文件中进行,并且由链接器最终确定任何内存位置。

请注意,如果您通过优化来编译此特定代码,则编译器可能会发现永远不会调用您的静态函数fn1 / fn2,并完全消除它们,在这种情况下,不会有使用的代码test_var

附带说明一下,您可以在几个编译单元中以所谓的临时定义定义变量另请参阅如何使用extern在源文件之间共享变量?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在哪里声明变量(Java)

来自分类Dev

在哪里声明变量(Java)

来自分类Dev

supportFragmentManager变量在哪里定义?

来自分类Dev

qt中的条件变量,在哪里声明

来自分类Dev

子选择vs声明的变量在哪里

来自分类Dev

在哪里声明多次调用的方法的变量

来自分类Dev

Delphi路径变量在哪里声明?

来自分类Dev

在哪里声明环境变量?

来自分类Dev

声明这些变量的适当位置在哪里?

来自分类Dev

Java:在哪里放置最终变量的声明

来自分类Dev

Smalltalk中在哪里定义类变量?

来自分类Dev

定义变量的最佳位置在哪里?

来自分类常见问题

TypeScript在哪里找到其变量声明?

来自分类Dev

静态变量应该在哪里声明

来自分类Dev

XDisplayName 在哪里声明?

来自分类Dev

在哪里声明结构

来自分类Dev

声明变量时extern未定义引用错误

来自分类Dev

cout在iostream中声明,但是在哪里定义?

来自分类Dev

MongoDB“ forEach”命令将在哪里运行?

来自分类Dev

MongoDB的“ forEach”命令将在哪里运行?

来自分类Dev

laravel 5:在哪里定义全局变量?

来自分类Dev

C ++项目:在哪里用函数定义全局变量

来自分类Dev

ngRepeat指令的源代码中定义的hashKey变量在哪里?

来自分类Dev

XCode 3环境变量在哪里定义?

来自分类Dev

这个简单的代码行中的变量定义在哪里?

来自分类Dev

XDG_CONFIG_HOME变量应在哪里定义?

来自分类Dev

在JMeter中,定义变量的最佳位置在哪里?

来自分类Dev

函数的静态局部变量对象在哪里定义?

来自分类Dev

定义类时,公共成员变量存储在哪里?