extern默认情况下全局变量是链接(或)它是否等同于通过指定extern存储类来声明变量?
在最外层的任何块外声明的变量的缺省存储持续时间,范围和链接具有static存储持续时间,文件范围和external链接.C11标准说:
[...]如果声明标识符的声明符或类型说明符出现在任何块或参数列表之外,则标识符具有文件范围,该范围终止于转换单元的末尾.[...]
[...]如果对象的标识符声明具有文件范围而没有存储类说明符,则其链接为
external.
声明标识符的对象,如果没有存储类说明符
_Thread_local,并且具有外部或内部链接或使用存储类说明符static,则具有静态存储持续时间.
所以,如果x是全球性的
int x;
Run Code Online (Sandbox Code Playgroud)
那么它的存储时间,范围和联系等同x于
extern int x;
Run Code Online (Sandbox Code Playgroud)
static默认情况下全局变量是否在范围(或)中它等同于通过指定static存储类来声明变量?
不,如上所述,它的持续时间是static,它有文件范围.
如果有任何c或c ++差异请澄清?
没有不同.两种语言的规则相同.
全局变量在链接中默认是外部的(或者)它相当于通过指定外部存储类来声明变量?
除非另有指定,否则它们具有外部链接(在 C++ 中除外,在 C++ 中,如果它们是常量,则它们具有内部链接)。
您链接到的第一个答案是说它不等于声明它extern(这使其成为纯粹的声明,而不是定义);并不是说它没有外部链接。
全局变量在范围内默认是静态的(或者)它相当于通过指定静态存储类来声明变量?
在 C++ 中,如果它们是常量,则它们具有内部链接(就像声明一样static),否则具有外部链接。在 C 语言中,它们总是具有外部链接。
如果有任何 c 或 c++ 差异请澄清?
如上所述,在 C 中默认始终是外部链接,而在 C++ 中它是常量变量的内部链接。
| 归档时间: |
|
| 查看次数: |
2853 次 |
| 最近记录: |