JPr*_*Pro 2 c variables extern
任何人都可以告诉我有什么特殊要求在C程序中使用任何一个EXTERN或GLOBAL变量吗?如果我从gloabl变为extern,我在下面的程序中看不出任何差异.
#include <stdio.h>
#include <stdlib.h>
int myGlobalvar = 10;
int main(int argc, char *argv[])
{
int myFunc(int);
int i;
i = 12;
myGlobalvar = 100;
printf("Value of myGlobalvar is %d , i = %d\n", myGlobalvar, i);
i = myFunc(10);
printf("Value of passed value : %d\n",i);
printf("again Value of myGlobalvar is %d , i = %d\n", myGlobalvar, i);
system("PAUSE");
return 0;
}
int myFunc(int i)
{
i = 20 + 1000;
//extern int myGlobalvar;
myGlobalvar = 20000;
// printf("Value of passed value : %d",i);
return i;
}
Run Code Online (Sandbox Code Playgroud)
如果取消注释extern int myGlobalvar,则值不会更改.
correct两者之间有什么区别吗?
任何人都可以纠正我吗?
Tho*_*ers 23
关键字extern表示"此变量的存储空间已分配".它告诉编译器"我在myGlobalvar这里引用,你以前没见过它,但是没关系;链接器会知道你在说什么." 在您的具体示例中,它并不是特别有用,因为编译器确实知道myGlobalvar- 它在先前在同一个翻译单元(.c或.cc文件)中定义.extern当您想要引用当前翻译单元中不存在的内容时,通常会使用它.作为您将链接到的库中定义的变量.
(当然,通常该库会extern在您应该包含的头文件中为您声明变量.)
从这里:
C/C++中的全局变量是一个变量,可以从程序中的任何模块访问.
int myGlobalVariable;
这为数据分配存储,并告诉编译器您要访问名为"myGlobalVariable"的存储.
但是如果你想从程序中的另一个模块访问该变量,你会怎么做?您不能使用上面给出的相同语句,因为那时您将有2个名为'myGlobalVariable'的变量,并且这是不允许的.所以,解决方案是让你的其他模块DECLARE变量而不是DEFINING它:
extern int myGlobalVariable;
这告诉编译器"有整型,在名为myGlobalVariable另一模块定义的变量,我希望你能接受我的访问尝试,而是因为另一个模块已经完成,对于它不分配存储空间".