gpt4 book ai didi

c - C99 中的声明符语义

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

根据 ISO/IEC 9899:1999 6.7.5 §2,

Each declarator declares one identifier, and asserts that when an operand of the same form as the declarator appears in an expression, it designates a function or object with the scope, storage duration, and type indicated by the declaration specifiers.

我不知道为什么表达式突然出现在声明符语义中。你能举一些例子来帮助我理解意思吗?

最佳答案

假设你有声明

int foo[42];

声明部分是foo[42]。每当相同形式的内容(即 foo 后跟 [ 后跟表达式后跟 ])出现在表达式中(并且声明在范围),该子表达式的类型将是声明的类型 int

换句话说:就语法而言,像这样的声明

int *bar;

bar声明为int *类型,而是将*foo声明为输入 int

更复杂的例子,拿声明

float (*op[42])(float, float);

在表达式中,相同形式的操作数可能如下所示

c = (*op[i])(a, b);

根据引用,右侧的类型为float

这意味着

*op[i]

必须有函数类型(我们忽略了函数指示符衰减到相应的指针类型和通过后缀 () 进行的函数调用实际上对指针起作用,而不是指示符这一事实)。

这又意味着

op[i]

必须表示一个函数指针,我们最终到达

op

表示一个函数指针数组,因为我们可以对其应用后缀 [] 并返回正确的类型。

很有趣,不是吗 ;)

关于c - C99 中的声明符语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26064051/

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