`
laowood
  • 浏览: 119566 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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;
.....
}
定义时分配内存,其他文件引用时不再分配内存。
3
1
分享到:
评论
3 楼 agurick 2009-03-26  
laowood 写道

在不写的一般情况下都是auto吧?自动变量。


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

再补充一点函数体内定义的static变量和函数外定义的static变量本质是一样的,只不过函数体内的static变量的名字在函数体外不能引用罢了。
2 楼 laowood 2009-03-26  
agurick 写道

补充一下,auto已经过时,已经不再使用。static 变量就存储区域而言和全局变量是一样的,只不过编译时只能生成内部符号,外部模块(其他的.c文件)链接不到。register 只是建议编译器把这个局部变量放到寄存器中而不要放到栈中,但最终是否这样做是由编译器决定的,声明为register的变量不一定会放到寄存器中,而没有声明为register的变量也有可能被放到寄存器中。extern 是向编译器说明,有这样一个这样类型的变量存在,至于是在哪儿定义的让链接器去找吧。


在不写的一般情况下都是auto吧?
自动变量。
1 楼 agurick 2009-03-25  
补充一下,auto已经过时,已经不再使用。
static 变量就存储区域而言和全局变量是一样的,只不过编译时只能生成内部符号,外部模块(其他的.c文件)链接不到。
register 只是建议编译器把这个局部变量放到寄存器中而不要放到栈中,但最终是否这样做是由编译器决定的,声明为register的变量不一定会放到寄存器中,而没有声明为register的变量也有可能被放到寄存器中。
extern 是向编译器说明,有这样一个这样类型的变量存在,至于是在哪儿定义的让链接器去找吧。

相关推荐

Global site tag (gtag.js) - Google Analytics