静态变量声明(C)

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

1。

  static int var1; static int var2; static int var3; 

2。

  static int var1, var2, var3; 

更具体地说,在情况2中,所有变量都是static ,还是只是var1

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

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

我们可以看到第6.7声明中的语法如下:

 declaration: declaration-specifiers init-declarator-listopt ; 

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

 declaration-specifiers: storage-class-specifier declaration-specifiersopt 

所以存储持续时间说明符适用于init-declarator-list中具有以下语法的所有声明符:

 init-declarator-list: init-declarator init-declarator-list , init-declarator init-declarator: declarator declarator = initializer 

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

 declarator: pointeropt direct-declarator [...] pointer: * type-qualifier-listopt * type-qualifier-listopt pointer 

他们是等同的。

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

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

您刚刚展示了如何以不同方式声明变量。

  static int var1, var2, var3; 

要么

 static int var1; static int var2; static int var3; 

具有相同的含义

即; 同一数据类型(以及相同存储类)的变量可以单独声明,也可以一起声明

 static int var1, var2, var3; 

相当于:

 static int var1; static int var2; static int var3; 

案例1或案例2都用于可读性目的,但含义相同。