Harbison/Steele的C引用说完整声明符的结尾是一个序列点.但什么是完整的声明者?
"完整的声明者是不属于另一个声明者的声明者"
...... 什么?
那么作为一个例子,C标准是否可以保证int i = 0, *j = &i内存地址与i指针中变量的值一起存储j?
换句话说,该int i = 0部分是完整的声明者吗?
不,您正在混合声明和声明者.
让我引用标准中的C语法部分:
declaration:
declaration-specifiers init-declarator-list[opt] ;
init-declarator-list:
init-declarator-list , init-declarator
init-declarator:
declarator
declarator = initializer
Run Code Online (Sandbox Code Playgroud)
然后:
declarator:
pointer[opt] direct-declarator
direct-declarator:
identifier
( declarator )
....
Run Code Online (Sandbox Code Playgroud)
TL; DR:int i = 0;是声明.该i部分是声明者.
如果您有指针,那么关于完整声明符的部分很清楚.这一行:
int *p[3] = { 0 };
Run Code Online (Sandbox Code Playgroud)
是宣言.该器件*p[3]是完全说明符,但p[3]和p也(不完全)声明符.
并且问你的第一个问题,是的,int i = 0, *j = &i;完全没问题,因为有两个完整的声明者:i和*j.每个完整声明符的末尾都有一个序列点加上每个初始值设定项末尾的另一个序列点.你甚至可以写void *p = &p;,它会很好.
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |