简体   繁体   中英

Static Variable Declaration (C)

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 ?

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.

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM