2

参考问题在声明中可以放置存储类说明符的位置?我开始分析declaration-specifiersand的概念declarators。以下是我的理解的积累。

声明

  • 通常,C声明遵循以下语法declaration-specifiers declarators;
  • declaration-specifiers包括type-specifiers,storage-class-specifierstype-qualifiers
  • declarators可以是变量、指针、函数和数组等。

我假设的规则

  • declaration-specifiers可以按任意顺序指定,例如
  • 不能超过一个storage-class-specifier
  • 另一方面可以有多个type-qualifiers
  • storage-class-specifier不得与declarator

问题

Q1:在常量指针的声明中,我看到混合declaratortype-qualifier如下

const int *const ptr; //Need justification for the mix of declarator and type-specifier

Q2:可以有一个指向static int. 是否有可能为指针提供static存储类?表示指针是静态的。

4

3 回答 3

4

我不确定我是否完全理解你的第一个问题。就 C++03 而言,语法constcv-qualifier. cv-qualifier可以出现在decl-specifier-seq(作为特定类型的type-specifier),它是声明的“公共”部分,也可以出现在 中init-declarator-list,它是单个声明符的逗号分隔序列。

该文法特别const规定了属于单个指针声明符的说明符必须*. 第一个const之前的说明符*不被视为单个声明符的一部分。这意味着在这个例子中

int const *a, *b;

const属于左侧:decl-specifier-seq,声明的“共同”部分。即两者ab都被声明为int const *。同时这

int *a, const *b;

只是格式错误,不会编译。

你的第二个问题我也不清楚。看来你把它弄反了。您声称“可以有一个指向static int”的指针?不,没有办法声明“指针static int”之类的东西。您可以声明一个静态int指针

static int *p;

在这种情况下,指针本身是静态的,正如您所希望的那样。

于 2012-10-26T19:13:39.567 回答
0

Q2:可以有一个指向静态int的指针。是否有可能为指针提供静态存储类?表示指针是静态的。

嗯,是:

static T *a;

声明a一个指向T. a具有静态存储持续时间。

于 2012-10-26T18:48:22.497 回答
0

通常,C 的“声明”就像这样的声明说明符声明符;

这里,“声明说明符”包括类型说明符、存储类说明符和类型限定符。

“声明符”可以是变量、指针、函数和数组等。

类似的错误:- [Error] 预期的声明说明符或字符串常量之前的“...” 这种类型的错误出现,原因是声明中的问题。

于 2018-10-11T15:12:35.443 回答