gpt4 book ai didi

c - 什么是 C 中的完整声明符?

转载 作者:太空狗 更新时间:2023-10-29 17:02:01 25 4
gpt4 key购买 nike

Harbison/Steele 的 C 引用文献指出,完整声明符 的末尾是一个序列点。但什么是完整声明符?

"A full declarator is a declarator that is not part of another declarator"

...什么?

举个例子,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

然后:

declarator:
pointer[opt] direct-declarator

direct-declarator:
identifier
( declarator )
....

TL;DR: int i = 0; 是一个声明i 部分是一个声明符

如果您有指针,那么关于完整声明符的部分就很清楚了。这一行:

int *p[3] = { 0 };

是声明。 *p[3] 部分是完整声明符,但 p[3]p 也是 (非完整)声明符

问你的第一个问题,是的,int i = 0, *j = &i; 完全没问题,因为有两个完整的声明符:i*j。每个完整声明符的末尾都有一个序列点,每个初始值设定项的末尾都有另一个序列点。您甚至可以编写 void *p = &p; 就可以了。

关于c - 什么是 C 中的完整声明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36071441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com