首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

C中的寄存器变量跟引用变量

2012-10-26 
C中的寄存器变量和引用变量总共有auto,static,register,extern。---------------------------寄存器变量 re

C中的寄存器变量和引用变量
总共有auto,static,register,extern。


---------------------------
寄存器变量 register,直接放到cpu中的变量 适合使用频繁的变量,可以提高运行速度。
只限于整形,字符型,指针型的局部变量。寄存器变量是动态变量,仅允许说明两个寄存器变量
eg:register int i;

----------------------------
引用型变量extern,某个模块文件中使用到另一个文件中的全局变量,使用extern来说明。
eg:file1.c中定义了全局变量int s,另一个file2.c中的函数fun1()需使用这个变量s
在file2.c中的fun1()对s进行外部变量说明:
fun1()
{
extern int s;
.....
}
定义时分配内存,其他文件引用时不再分配内存。 2 楼 laowood 2009-03-26   agurick 写道
补充一下,auto已经过时,已经不再使用。static 变量就存储区域而言和全局变量是一样的,只不过编译时只能生成内部符号,外部模块(其他的.c文件)链接不到。register 只是建议编译器把这个局部变量放到寄存器中而不要放到栈中,但最终是否这样做是由编译器决定的,声明为register的变量不一定会放到寄存器中,而没有声明为register的变量也有可能被放到寄存器中。extern 是向编译器说明,有这样一个这样类型的变量存在,至于是在哪儿定义的让链接器去找吧。


在不写的一般情况下都是auto吧?
自动变量。 3 楼 agurick 2009-03-26   laowood 写道
在不写的一般情况下都是auto吧?自动变量。


我的理解,函数体内定义的变量,除了static的,其他都是auto的,其实就是栈上的局部变量。auto是历史遗留产物,不要再关心这个了。

再补充一点函数体内定义的static变量和函数外定义的static变量本质是一样的,只不过函数体内的static变量的名字在函数体外不能引用罢了。

热点排行