volatile是c中的存储说明符还是存储类?

时间:2014-09-11 05:44:14

标签: c declaration

C中的存储类存储说明符有什么区别? volatile是存储类还是存储说明符

EX:static volatile int a;     没有任何错误但是     static auto/register/extern int a;正在编译错误。

1 个答案:

答案 0 :(得分:4)

以下是存储类说明符,最多只能有一个:

typedef
extern
static
auto
register

我们可以从draft C99 standard部分6.7.1 存储类说明符中看到这一点,它列出了上述说明符并说:

  

最多可以在声明中给出一个存储类说明符   声明中的说明符.102)

另一方面,

volatile是一个类型限定符,我们可以从6.7.3 类型限定符中看到它,其中列出了以下限定符:< / p>

const
restrict
volatile

并且还说:

  

如果相同的限定符出现在同一个中多次   specifier-qualifier-list,直接或通过一个或多个typedef,   行为与只出现一次的行为相同。

我们可以从6.7 声明部分的语法中看到声明可以同时具有存储类说明符类型限定符

declaration-specifiers:
    storage-class-specifier declaration-specifiersopt
    type-specifier declaration-specifiersopt
    type-qualifier declaration-specifiersopt
    function-specifier declaration-specifiersopt