全局声明的变量被称为具有程序范围
使用static关键字全局声明的变量据说具有文件范围.
例如:
int x = 0; // **program scope**
static int y = 0; // **file scope**
static float z = 0.0; // **file scope**
int main()
{
int i; /* block scope */
/* .
.
.
*/
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别?
在C89中,static关键字是否影响范围?
我的软件负责人告诉我:
"在文件顶部标记为static的变量在技术上不再具有全局范围.静态是范围限定符以及存储关键字.范围是一个涵盖符号可见性的概念,尽管可见性自动编译为具有存储持续时间本质上与几乎所有语言相关.我的意思是你不能命名一个范围,它也没有定义C/C++中的存储持续时间.表达式范围不是用户定义的,而是由C/C++涵盖的-param和r-param块作用域在C/C++中完全是词汇用户定义的主体函数作用域在C/C++中完全是词汇用户定义的主体和声明文件作用域在技术上并不存在于C/C++中,因为全局和模块作用域取决于词典模块范围是在C/C++中使用static定义的关键字,其他范围词典更改访问规则但可见性仍然基于模块全局范围是C/C++中的默认值,当没有其他范围适用且由词法控制时e xtern关键字问题是static不是作为关键字的范围限定符.它是范围限定符和内存关键字."
我糊涂了.我一直认为静态与翻译单元之间的可见性和变量的存储持续时间有关.两者都与范围无关.这不是这种情况吗?C++中的静态/范围关系是否不同?