首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声明说明符和声明器

声明说明符和声明器
EN

Stack Overflow用户
提问于 2012-10-26 18:45:34
回答 3查看 12.7K关注 0票数 2

关于Where in a declaration may a storage class specifier be placed?的问题,我开始分析declaration-specifiersdeclarators的概念。以下是我的理解的积累。

声明

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

我假设的规则

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

问题

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

代码语言:javascript
复制
const int *const ptr; //Need justification for the mix of declarator and type-specifier

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-26 19:13:39

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

语法是明确规定的,属于单个指针声明器的const说明符必须遵循*。第一个声明符之前的const说明符不被认为是单个声明符的一部分。这意味着在本例中

代码语言:javascript
复制
int const *a, *b;

const属于左侧:decl-specifier-seq,声明的“公共”部分。也就是说,ab都被声明为int const *。同时这

代码语言:javascript
复制
int *a, const *b;

只是格式错误而且不会编译。

你的第二个问题在我看来也不清楚。看来你倒过来了。你声称“可以有指向static int的指针”?不,没有办法声明“指向static int的指针”。不过,您可以声明指向int的静态指针

代码语言:javascript
复制
static int *p;

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

票数 4
EN

Stack Overflow用户

发布于 2012-10-26 18:48:22

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

嗯,是的:

代码语言:javascript
复制
static T *a;

声明a为指向T的指针。a具有静态存储时间。

票数 0
EN

Stack Overflow用户

发布于 2018-10-11 15:12:35

一般来说,C“声明”就像这个声明--说明符声明者;

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13092620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档