2022-04-01 C中的extern 和static

2022-04-01 C中的extern 和static,第1张

c语言中,定义在所有函数之外的变量称全局静态变量,具有外部连接性,全局性,全程序存储期。


换成人话,就是可以在定义之前进行调用,只需要进行extern的声明即可。


所有函数可调用。


同时,只要程序还在执行,它就不会被抹除。


当外部变量被static修饰,就发生了变化,此时它被成为外部静态变量,这个词简直就是误导,此外部就不是文件外部,而是函数外部了,也就是说,这个变量不能用在其定义之前的代码使用,也不能被跨文件使用,哪怕用extern修饰的声明也是不可以的。


在多文件编译的时候,一个非static修饰的全局静态变量只能被定义一次,其他文件想要使用此变量,需要用extern进行修饰声明。


但是,static修饰的外部静态变量则可与上面的全局静态变量使用一个名字,且此文件作用域内,静态变量的值一定是static修饰的变量的值,而非其他。


#include 

int main()
{
    extern int traveler; //正确,traveler没有被static修饰,是外部连接的。


extern int stayhome; //错误,stayhome被static修饰,是内部连接的,只在定义之后可用,不可向前调用。


printf("%d %d\n", traveler, stayhome); return 0; } int traveler = 1; static int stayhome = 1;

这有什么用?我的想法是经static修饰的全局静态变量,不会干扰其定义前的头文件中的变量内容,想象,一旦一个全局变量定义后,可以在前后引入的所有文件都可用,绝对是一件很可怕的事情,如果涉及文件太多,那就是幽灵般的存在,此时一不小心引入的bug,恐怕十分难缠。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/564280.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)

保存