参考问题在声明中可以放置一个存储类规范符?我开始分析declaration-specifiers
和declarators
的概念。以下是我理解的积累。
声明
- 通常,
C
声明遵循declaration-specifiers declarators;
的语法 -
declaration-specifiers
包括type-specifiers
,storage-class-specifiers
和type-qualifiers
-
declarators
可以是变量,指针,功能和数组等。
我假设
的规则-
declaration-specifiers
可以按任何顺序指定,作为示例 - 不能有一个
storage-class-specifier
- 另一方面可以有多个
type-qualifiers
-
storage-class-specifier
不得与declarator
一起使用
问题
Q1:在恒定指针的声明中,我看到declarator
和type-qualifier
的混合物如下
const int *const ptr; //Need justification for the mix of declarator and type-specifier
Q2:可以有一个指针到static int
。是否有可能提供指针A static
存储类?表示指针是静态的。
我不确定我完全了解您的第一个问题。就C 03语法const
而言,是cv-qualifier
。cv-qualifier
可以存在于decl-specifier-seq
中(作为特定类型的type-specifier
),它是声明的"常见"部分,以及init-declarator-list
,它是单个声明者的逗号分隔序列。
语法是明确提出的,即属于单个指针申报程序的const
指定符必须遵循 *
。在第一个*
之前的const
指定符被视为单个声明器的一部分。这意味着在此示例中
int const *a, *b;
const
属于左侧:decl-specifier-seq
,该声明的"常见"部分。IE。a
和b
均声称为int const *
。同时这个
int *a, const *b;
简单地形成了,不会编译。
您的第二个问题对我来说也不清楚。看来你把它倒了。您声称"可以指向static int
的指针"?不,没有办法声明"指向static int
"之类的东西。您可以通过
int
static int *p;
在这种情况下,指针本身是静态的,如您所希望的。
Q2:可以有一个指向静态INT的指针。是否有可能向指针提供静态存储类?表示指针是静态的。
好吧,是:
static T *a;
声明a
指向T
的指针。a
具有静态存储持续时间。
通常,c"声明"就像此声明规范器声明;
在此,"声明特征符"包括类型的特定符,存储级特性符和类型Qualifiers。
"声明器"可以是变量,指针,功能和数组等。
错误类似: - [错误]预期声明说明符或字符串常数之前的'...'这种类型的错误出现了,原因是声明中的问题。