静态变量声明(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都用于可读性目的,但含义相同。