C++ 默认情况下,全局变量是外部变量,还是等同于在全局中用外部变量声明变量?
我已经回答了以下两个问题: 这两个问题以不同的方式说明了这两件事 问题1的答复:C++ 默认情况下,全局变量是外部变量,还是等同于在全局中用外部变量声明变量?,c++,c,static,global,extern,C++,C,Static,Global,Extern,我已经回答了以下两个问题: 这两个问题以不同的方式说明了这两件事 问题1的答复: 全局变量在C和C++中不被外部或静态默认。 问题2的答复: 如果未指定存储类(即extern或static关键字),则默认情况下全局变量具有外部链接 我需要知道以下几点: 全局变量是否默认为链接中的extern(或者)它是否等同于通过指定extern存储类来声明变量 默认情况下,全局变量是静态的吗?它是否等同于通过指定静态存储类来声明变量 与C或C++有什么区别吗?谁能澄清一下吗 全局变量是否默认为链接中的ex
全局变量在C和C++中不被外部或静态默认。
问题2的答复: 如果未指定存储类(即extern或static关键字),则默认情况下全局变量具有外部链接 我需要知道以下几点:extern
(或者)它是否等同于通过指定extern
存储类来声明变量是静态的
吗?它是否等同于通过指定静态
存储类来声明变量C
或C++
有什么区别吗?谁能澄清一下吗extern
(或者)它等同于通过指定extern
存储类来声明变量
在最外层,在任何块之外声明的变量的默认存储持续时间、范围和链接具有静态
存储持续时间、文件范围和外部
链接。C11标准规定:
6.2.1标识符范围(p4):
[…]如果声明标识符的声明符或类型说明符出现在任何块或参数列表之外,该标识符具有文件作用域,该文件作用域在翻译单元末尾终止。[……]
6.2.2标识符的关联(p5):
[…]如果对象标识符的声明具有文件作用域且没有存储类说明符,则其链接为external
6.2.4物品的储存期限(p3):
在没有存储类说明符的情况下声明其标识符的对象
\u Thread\u local
,具有外部或内部链接或存储类说明符static
,具有静态存储持续时间
因此,如果x
是全局的
int x;
则其存储时间、范围和链接相当于中的x
extern int x;
全局变量在作用域中是否默认为静态
(或者)它等同于通过指定静态
存储类来声明变量
不。正如我上面所说的,它的持续时间是静态的,并且它有文件范围
如果有任何C或C++差异请澄清?< /P> 没有区别。这两种语言的规则是相同的
全局变量是否默认为链接中的extern
(或者)它等同于通过指定extern
存储类来声明变量
在最外层,在任何块之外声明的变量的默认存储持续时间、范围和链接具有静态
存储持续时间、文件范围和外部
链接。C11标准规定:
6.2.1标识符范围(p4):
[…]如果声明标识符的声明符或类型说明符出现在任何块或参数列表之外,该标识符具有文件作用域,该文件作用域在翻译单元末尾终止。[……]
6.2.2标识符的关联(p5):
[…]如果对象标识符的声明具有文件作用域且没有存储类说明符,则其链接为external
6.2.4物品的储存期限(p3):
在没有存储类说明符的情况下声明其标识符的对象
\u Thread\u local
,具有外部或内部链接或存储类说明符static
,具有静态存储持续时间
因此,如果x
是全局的
int x;
则其存储时间、范围和链接相当于中的x
extern int x;
全局变量在作用域中是否默认为静态
(或者)它等同于通过指定静态
存储类来声明变量
不。正如我上面所说的,它的持续时间是静态的,并且它有文件范围
如果有任何C或C++差异请澄清?< /P> 没有区别。这两种语言的规则是相同的
全局变量在链接中是否默认为外部变量(或者)它等效于通过指定外部存储类声明变量除非另有说明,否则它们具有外部链接(C++除外,如果它们是常数,则它们具有内部链接)。 您链接到的第一个答案是,它不等同于声明它
extern
(这使它成为一个纯粹的声明,而不是定义);并不是说它没有外部链接
全局变量在作用域中默认是静态的(或者)它等同于通过指定静态存储类来声明变量
<>在C++中,它们有内部链接(如声明为代码>静态<代码>),如果它们是常数,则外部链接。在C中,它们总是有外部链接
如果有任何C或C++差异请澄清?< /P>
以上,默认为C中的外部链接,而C++中则为常量变量。 全局变量在链接中是否默认为外部变量(或者)它等效于通过指定外部存储类声明变量
除非另有说明,否则它们具有外部链接(C++除外,如果它们是常数,则它们具有内部链接)。 您链接到的第一个答案是,它不等同于声明它
extern
(这使它成为一个纯粹的声明,而不是定义);并不是说它没有外部链接
全局变量在作用域中默认是静态的(或者)它等同于通过指定静态存储类来声明变量
<>在C++中,它们有内部链接(如声明为代码>静态<代码>),如果它们是常数,则外部链接。在C中,它们总是有外部lin