静态变量声明(C)

Fid*_*its 7 c declaration static-variables language-lawyer

以下两个static变量声明是否相同?

1.

    static int var1;
    static int var2;
    static int var3;
Run Code Online (Sandbox Code Playgroud)

2.

    static int var1, var2, var3;
Run Code Online (Sandbox Code Playgroud)

更具体地说,在案例2中,所有变量都是static,或者只是var1

And*_*mas 6

他们是等同的.

在案例2中,所有变量都是静态的.

存储类说明符static适用于声明中的所有声明的变量.


Sha*_*our 4

1是的, case和中的声明2是相同的。我们可以通过C99 标准草案6.7.5 声明符部分看到这一点(重点是我的未来):

每个声明符声明一个标识符,并断言当与声明符形式相同的操作数出现在表达式中时,它指定一个函数或对象,其范围、存储持续时间和类型由声明说明符指示

6.7 从声明部分我们可以看到语法如下:

declaration:
   declaration-specifiers init-declarator-listopt ;
Run Code Online (Sandbox Code Playgroud)

声明说明符包括存储持续时间:

declaration-specifiers:
   storage-class-specifier declaration-specifiersopt
Run Code Online (Sandbox Code Playgroud)

因此存储持续时间说明符适用于init-declarator-list中的所有声明符,其语法如下:

init-declarator-list:
   init-declarator
   init-declarator-list , init-declarator
init-declarator:
   declarator
   declarator = initializer
Run Code Online (Sandbox Code Playgroud)

您可能想知道指针,它们的处理方式不同,我们可以从6.7.5for声明符的语法中看到这一点:

declarator:
    pointeropt direct-declarator
[...]
pointer:
    * type-qualifier-listopt
    * type-qualifier-listopt pointer
Run Code Online (Sandbox Code Playgroud)