C-声明说明符和声明者



参考问题在声明中可以放置一个存储类规范符?我开始分析declaration-specifiersdeclarators的概念。以下是我理解的积累。

声明

  • 通常,C声明遵循declaration-specifiers declarators;的语法
  • declaration-specifiers包括type-specifiersstorage-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。是否有可能提供指针A static存储类?表示指针是静态的。

我不确定我完全了解您的第一个问题。就C 03语法const而言,是cv-qualifiercv-qualifier可以存在于decl-specifier-seq中(作为特定类型的type-specifier),它是声明的"常见"部分,以及init-declarator-list,它是单个声明者的逗号分隔序列。

语法是明确提出的,即属于单个指针申报程序的const指定符必须遵循 *。在第一个*之前的const指定符被视为单个声明器的一部分。这意味着在此示例中

int const *a, *b;

const属于左侧:decl-specifier-seq,该声明的"常见"部分。IE。ab均声称为int const *。同时这个

int *a, const *b;

简单地形成了,不会编译。

您的第二个问题对我来说也不清楚。看来你把它倒了。您声称"可以指向static int的指针"?不,没有办法声明"指向static int"之类的东西。您可以通过

声明静态指针到int
static int *p;

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

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

好吧,是:

static T *a;

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

通常,c"声明"就像此声明规范器声明;

在此,"声明特征符"包括类型的特定符,存储级特性符和类型Qualifiers。

"声明器"可以是变量,指针,功能和数组等。

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

最新更新