Vin*_*til 15 c++ storage default global-variables extern
什么是全局变量的默认存储类?
我在网上搜索时发现,有些网站说它是static.但是,静态意味着内部链接,并且变量在文件范围之外不可用,即它不应该对其他目标文件可用.但是,仍然可以使用声明等方式访问其他文件extern int i.
而且,如果我明确提到static全局变量,那么它在文件范围之外是不可用的.
那么,全局变量的正确默认存储类是什么?
AnT*_*AnT 17
对于通常所说的"全局"变量,没有"默认存储类".在命名空间范围内定义变量时,它始终具有静态存储持续时间.没有办法改变这一点,这就是为什么"默认"的想法在这里不适用的原因.(存储持续时间是正确调用的.)
将关键字static应用于在命名空间作用域中定义的变量时,它不会影响其存储持续时间 - 它已经是静态的并且保持静态 - 但它会影响它的链接.关键字static将此变量的链接从外部(默认)更改为内部.链接是一个单独的概念,几乎与存储持续时间无关.
Mat*_*hen 16
默认存储持续时间是静态的,但默认链接是外部的.你不是唯一一个发现它有点令人困惑的人. C Book(总是很好的参考)说:
"你可能会发现这些不同元素之间的相互作用既复杂又令人困惑:那是因为它们是!"
带有该引用的部分,声明,定义和可访问性,有一个有用的表(8.1).最后一行描述了您感兴趣的情况.正如它所述,没有存储类说明符的数据对象具有外部链接和静态持续时间.