C中的存储类和存储说明符有什么区别? volatile是存储类还是存储说明符?
EX:static volatile int a;
没有任何错误但是
static auto/register/extern int a;
正在编译错误。
答案 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