C语言中离不开变量。
自然会想到变量有哪些:
1)局部变量:分配在堆栈区域。
用的最多,只有在所定义的函数内可以使用。
2)寄存器变量:变量分配在cup的通用寄存器里(用的较少)。
3)外部变量:分配在静态数据存储区域。
也称全局变量,定义在所有的函数体的外部。
在其他文件(非定义全局变量的文件)里可用extern 引用全局变量。
4)静态变量:分配在静态数据存储区
静态局部变量:全局寿命,只在其定义的函数局部可见。
静态全局变量:全局寿命,只在其所定义的文件里能用。
注意:
1)局部变量对外部变量、静态变量具有屏蔽作用,即当同时局部变量与其他变量都存在时,局部变量优先级最高。
2)静态全局变量与全局变量(外部变量)最大的区别是:静态全局变量只能在其所定义的文件是可用的,其他文件不能引用。
3)外部变量,静态全局变量一般在.c文件(因在.h中,直接会引入头文件)。
========================================================
注意:头文件的引用部分
实例
全局变量引用
externdef.c
//定义一个全局变量
char caExtern[256];
extern.c
/*
* extern.c
*
* Created on: 2013-10-21
* Author: Administrator
*/
#include <stdio.h>
#include <string.h>
extern char caExtern[256];
int main()
{
memset(caExtern, 0, sizeof(caExtern));
strcpy(caExtern, "引用外部变量测试");
fprintf(stderr,"%s\n",caExtern);
return 0;
}
编译与测试结果:
localhost.localdomain@/home/term/mengfh/checkfun/variable>>cc -c externdef.c
localhost.localdomain@/home/term/mengfh/checkfun/variable>>cc extern.c externdef.o
localhost.localdomain@/home/term/mengfh/checkfun/variable>>./a.out
引用外部变量测试
localhost.localdomain@/home/term/mengfh/checkfun/variable>>
---------------------------------------------------------------------------------------
实例:
静态全局变量
staticdef.c
static char caStatic[256];
static.c
/*
* static.c
*
* Created on: 2013-10-21
* Author: Administrator
*/
#include <stdio.h>
#include <string.h>
extern char caStatic[256];
int main()
{
memset(caStatic, 0, sizeof(caStatic));
strcpy(caStatic, "引用静态外部变量测试");
fprintf(stderr,"%s\n",caStatic);
return 0;
}
编译与结果:
localhost.localdomain@/home/term/mengfh/checkfun/variable>>cc static.c staticdef.o
/tmp/ccOUYg3R.o: In function `main':
static.c:(.text+0x12): undefined reference to `caStatic'
static.c:(.text+0x31): undefined reference to `caStatic'
static.c:(.text+0x3b): undefined reference to `caStatic'
static.c:(.text+0x45): undefined reference to `caStatic'
static.c:(.text+0x4f): undefined reference to `caStatic'
/tmp/ccOUYg3R.o:static.c:(.text+0x59): more undefined references to `caStatic' follow
collect2: ld returned 1 exit status
localhost.localdomain@/home/term/mengfh/checkfun/variable>>