C中的完整声明者是什么?

wol*_*ats 9 c syntax

Harbison/Steele的C引用说完整声明符的结尾是一个序列点.但什么是完整的声明者?

"完整的声明者是不属于另一个声明者的声明者"

...... 什么?

那么作为一个例子,C标准是否可以保证int i = 0, *j = &i内存地址与i指针中变量的值一起存储j

换句话说,该int i = 0部分是完整的声明者吗?

rod*_*igo 9

不,您正在混合声明声明者.

让我引用标准中的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;,它会很好.