变量声明向编译器保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
变量的声明有两种情况:
- 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。
- 2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。 例如:extern int a 其中变量 a 可以在别的文件中定义的。
- 除非有extern关键字,否则都是变量的定义。
- extern int i; //声明,不是定义
- int i; //声明,也是定义
实例
尝试下面的实例,其中,变量在头部就已经被声明,但是定义与初始化在主函数内:
#include <stdio.h>
int x; int y; // 函数外定义变量 x 和 y
int addtwonum()
{ // 函数内声明变量 x 和 y 为外部变量
extern int x; // 给外部变量(全局变量)x 和 y 赋值
extern int y;
x = 1;
y = 2;
return x+y;
}
int main()
{
int result; // 调用函数
addtwonum result = addtwonum();
printf("result 为: %d",result);
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
result 为: 3
如果需要在一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的文件中将变量加上 extern 关键字的声明即可。
addtwonum.c 文件代码:
#include <stdio.h> /*外部变量声明*/ extern int x ; extern int y ; int addtwonum() { return x+y; }
test.c 文件代码:
#include <stdio.h> /*定义两个全局变量*/ int x=1; int y=2; int addtwonum(); int main(void) { int result; result = addtwonum(); printf("result 为: %d\n",result); return 0; }
当上面的代码被编译和执行时,它会产生下列结果:
$ gcc addtwonum.c test.c -o main $ ./main result 为: 3
原文地址:https://www.cnblogs.com/zhangdemingQ/p/12111700.html