static关键字是否会影响范围?

Tre*_*key 6 c c++ static scope global

在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++中的静态/范围关系是否不同?

小智 6

在文件顶部标记为static的变量在技术上不再具有全局范围.

"全局范围"不是C中存在的概念.适当的术语是文件范围.在C++中,存在一个类似的概念,称为全局命名空间.加班人似乎将这两个术语结合起来.

Static是范围限定符以及存储关键字.

static它不是范围限定符,它是存储类说明符.static可以影响链接和存储持续时间,但不影响范围.

范围是一个涵盖符号可见性的概念,尽管可见性会自动编译为存储持续时间与几乎所有语言本质上相关联.

范围与符号的可见性无关(在链接器意义上).联系确实(因此它被称为链接时代).第二个条款是胡言乱语.

我的意思是你不能命名一个范围,它也没有定义C/C++中的存储持续时间.

这句话也没有意义.考虑块范围内的局部静态变量.它具有静态存储持续时间,即使块范围定义了自动存储变量.

表达式范围不是用户定义的,并且在l-param和r-param涵盖的C/C++中

"表达范围"毫无意义."l-param"和"r-param也是毫无意义的词语.

跳过关于"词汇"和"模块"的部分,因为它没有任何意义.

问题是static不仅仅是作为关键字的范围限定符.它是范围限定符和内存关键字.

同样,static与范围或内存无关.使用这个过于简化的解释基本上省略了存储持续时间,范围和初始化的所有其他方面,因此它只是简单的不起作用.