所以我试图理解它以及它的用途,我得到了声明和定义变量之间的区别。
我将尝试解释在使用教程中的示例时我感到困惑的内容。
示例1:
extern int var;
int main(void)
{
var = 10;
return 0;
}
所以我知道你不能将var分配给10,因为没有分配内存。
示例2:
#include "somefile.h"
extern int var;
int main(void)
{
var = 10;
return 0;
}
我迷失在这里。 somefile.h会有类似int var = 0的东西;要声明它是否正确?那么为什么这个程序会再次声明呢?
答案 0 :(得分:1)
强制性要点#1:这与全局变量有关,所以你真正需要/想做的第一件事就是不学习如何使用它们,而是如何避免它们。他们比解决方案更容易导致问题。
那就是说,至少在通常的情况下,你在标题中放了一个extern
声明。您将变量的定义放在一个源文件中,并将标头包含在需要访问该变量的任何其他文件中。
例如:
//file1.cpp:
int var;
然后声明变量的标题:
//file1.h:
extern int var;
然后在一个需要访问变量的文件中:
#include "file1.h"
int main() {
var = 10; // Yes, this *is* allowed
}
...在另一个需要访问变量的文件中:
#include "file1.h"
int f() { return var; }
我会重复一遍:这几乎不是必要或不可取的。如果你实际上经常使用全局变量,那么你可能做错了(我做了一次每年使用一次全局的练习所以我不会忘记怎么做,但是至少我已经有几年了使用除此之外的任何其他。)
答案 1 :(得分:0)
基本上,extern关键字告诉编译器/链接器它应该期望变量在程序的其他地方被实例化和定义,例如你链接的库或者“somefile.h”编译的任何目标文件。 Extern让compielr和程序员“知道”变量,同时让另一段代码实际管理它。
以下是对extern的一个很好的解释: https://stackoverflow.com/a/496476/1874323
答案 2 :(得分:0)
在你的情况下,你说得对,'int var = 1;'必须在某个地方定义,实际上,在c \ cpp文件中,而不是标题(如果它在标题中,你不需要外部它,你可以#include它)。
如果你是extern一个变量,但是没有在某个地方定义它,那么链接器就会变得不快 - 有一个未解决的符号错误(即它说“你告诉我要找一个名为'var'的变量,但我可以'找到它。)
所以 - 理论上,您不应该使用未定义的extern'd变量创建可执行文件。