声明符和声明符(Declaration specifiers and declarators)

2019-08-02 00:20发布

参照问题在哪里声明可以在存储类说明放在哪里? 我开始分析的概念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 。 有没有提供指针的可能性static存储类? 意味着指针是静态的。

Answer 1:

我不知道我完全理解你的第一个问题。 在C ++ 03语法方面constcv-qualifiercv-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;

在这种情况下指针本身是静态的,因为你希望它是。



Answer 2:

Q2:可以有一个指向静态INT。 有没有提供指针的静态存储类的可能性? 意味着指针是静态的。

嗯,是:

static T *a;

声明a指针Ta具有静态存储时间。



Answer 3:

一般来说,C“声明”是这样的声明,说明符声明符;

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

“说明符”可以是变量,指针,功能和阵列等。

类似的错误: - 之前字符串常量这种类型的错误[错误]预计声明符或“...”来了,原因是它在声明的问题。



文章来源: Declaration specifiers and declarators