Are the following two static
variable declarations equivalent?
1.
static int var1;
static int var2;
static int var3;
2.
static int var1, var2, var3;
More specifically, in case 2, will all variables be static
, or just var1
?
Yes the declarations in case 1
and 2
are identical. We can see this by going to the draft C99 standard section 6.7.5
Declarators which says (emphasis mine going forward):
Each declarator declares one identifier, and asserts that when an operand of the same form as the declarator appears in an expression, it designates a function or object with the scope, storage duration, and type indicated by the declaration specifiers.
We can see the grammar from section 6.7
Declarations is as follows:
declaration:
declaration-specifiers init-declarator-listopt ;
the declaration-specifiers include storage duration:
declaration-specifiers:
storage-class-specifier declaration-specifiersopt
so the storage duration specifier applies to all the declarators in the init-declarator-list which has the following grammar:
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator
declarator = initializer
You may wonder about pointers, they are handled handled differently and we can see this from the grammar in 6.7.5
for declarators:
declarator:
pointeropt direct-declarator
[...]
pointer:
* type-qualifier-listopt
* type-qualifier-listopt pointer
They're equivalent.
In case 2, all the variables will be static.
The storage class specifier static
applies to all the declared variables in the declaration.
You've just shown how variables can be declared differently.
static int var1, var2, var3;
or
static int var1;
static int var2;
static int var3;
has the same meaning
ie; a variable of same data type(and also of same storage class) can be declared individually or all together once
static int var1, var2, var3;
is equivalent to:
static int var1;
static int var2;
static int var3;
case 1 or case 2 both are used for readability purpose but meaning is same.
来源:https://stackoverflow.com/questions/24658907/static-variable-declaration-c