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?
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)