is global variables are extern
by default in linkage (or) it is equivalent to declaring variable by specifying extern
storage class?
The default storage duration, scope and linkage of variables declared outside any block, at the outer most level, have static
storage duration, file scope and external
linkage. C11 standard says that:
6.2.1 Scopes of identifiers (p4):
[...] If the declarator or type specifier that declares the identifier appears outside of any block or list of parameters, the identifier has file scope, which terminates at the end of the translation unit. [...]
6.2.2 Linkages of identifiers (p5):
[...] If the declaration of an identifier for an object has file scope and no storage-class specifier, its linkage is external
.
6.2.4 Storage durations of objects (p3):
An object whose identifier is declared without the storage-class specifier
_Thread_local
, and either with external or internal linkage or with the storage-class specifier static
, has static storage duration.
So, if x
is global
int x;
then its storage duration, scope and linkage is equivalent to x
in
extern int x;
is global variables are static
by default in scope (or) it is equivalent to declaring variable by specifying static
storage class?
No. As I stated above that its duration is static
and it has file scope.
If there is any c or c++ difference please clarify?
No difference. Rule is same in both languages.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…