关于Where in a declaration may a storage class specifier be placed?的问题,我开始分析declaration-specifiers和declarators的概念。以下是我的理解的积累。
声明
C声明遵循declaration-specifiers declarators;的语法。declaration-specifiers由type-specifiers、storage-class-specifiers和type-qualifiers组成。declarators可以是变量、指针、函数和数组等。我假设的规则
declaration-specifiers可以按任何顺序指定,例如storage-class-specifiertype-qualifiersstorage-class-specifier不应与declarator一起使用问题
Q1:在常量指针的声明中,我看到了declarator和type-qualifier的混合,如下所示
const int *const ptr; //Need justification for the mix of declarator and type-specifierQ2:可以有指向static int的指针。是否有可能为指针提供一个static存储类?表示指针是静态的。
发布于 2012-10-26 19:13:39
我不确定我是否完全理解你的第一个问题。就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,声明的“公共”部分。也就是说,a和b都被声明为int const *。同时这
int *a, const *b;只是格式错误而且不会编译。
你的第二个问题在我看来也不清楚。看来你倒过来了。你声称“可以有指向static int的指针”?不,没有办法声明“指向static int的指针”。不过,您可以声明指向int的静态指针
static int *p;在这种情况下,指针本身是静态的,正如您所希望的那样。
发布于 2012-10-26 18:48:22
Q2:可以有一个指向静态int的指针。是否有可能为指针提供静态存储类?表示指针是静态的。
嗯,是的:
static T *a;声明a为指向T的指针。a具有静态存储时间。
发布于 2018-10-11 15:12:35
一般来说,C“声明”就像这个声明--说明符声明者;
在这里,“声明-说明符”包括类型说明符、存储类说明符和类型限定符。
“声明者”可以是变量、指针、函数和数组等。
错误,如:-错误预期声明说明符或“.”在字符串常量出现之前,这种类型的错误出现之前,其原因是声明中的问题。
https://stackoverflow.com/questions/13092620
复制相似问题