静态变量声明(C)

时间:2014-07-09 16:19:50

标签: c declaration language-lawyer static-variables

以下两个static变量声明是否等效?

1

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

2

    static int var1, var2, var3;

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

4 个答案:

答案 0 :(得分:6)

他们是等同的。

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

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

答案 1 :(得分:4)

12相同的声明。我们可以转到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都用于可读性目的,但含义相同。