以下两个static
变量声明是否等效?
1
static int var1;
static int var2;
static int var3;
2
static int var1, var2, var3;
更具体地说,在案例2中,所有变量都是static
,还是var1
?
答案 0 :(得分:6)
他们是等同的。
在案例2中,所有变量都是静态的。
存储类说明符static
适用于声明中的所有声明变量。
答案 1 :(得分:4)
是1
和2
相同的声明。我们可以转到draft C99 standard部分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
中的语法中看到声明符:
declarator:
pointeropt direct-declarator
[...]
pointer:
* type-qualifier-listopt
* type-qualifier-listopt pointer
答案 2 :(得分:1)
您刚刚展示了如何以不同方式声明变量。
static int var1, var2, var3;
或
static int var1;
static int var2;
static int var3;
具有相同含义
即;同一数据类型的变量(以及相同的存储类)的变量可以单独声明,也可以一起声明一次
答案 3 :(得分:1)
static int var1, var2, var3;
相当于:
static int var1;
static int var2;
static int var3;
案例1或案例2都用于可读性目的,但含义相同。