gpt4 book ai didi

c - 在C89中, 'old-style'函数定义中函数名的范围是什么?

转载 作者:行者123 更新时间:2023-12-01 18:27:02 26 4
gpt4 key购买 nike

下面的 C89 是合法的吗?

void f(a)
char a[sizeof &f];
{
}

我的想法是肯定的,因为在任何 block 范围之外声明的标识符的范围在声明符结束后立即开始并延伸到翻译单元的结束。因此,“f”的范围包括声明列表。

“gcc -pedantic -Wall”接受它。"clang -pedantic -Wall"和 lcc 一样拒绝它。

最佳答案

来自 C90 标准(强调我的)

(C90, 6.1.2.1) "Structure, union, and enumeration tags have scope that begins just after the appearance of the tag in a type specifier that declares the tag. Each enumeration constant has scope that begins just after the appearance of its defining enumerator in an enumerator list. Any other identifier has scope that begins just after the completion of its declarator."

所以对我来说也是一个有效的函数声明。

编辑: 魔鬼在细节中(完成 一词),经过深思熟虑,我认为这不是有效的函数声明,因为声明符在之后不完整void f(a).

void f(a)
char a[sizeof &f];
^

^ 在这里标记声明符的完成位置和 f 范围的开始位置。

关于c - 在C89中, 'old-style'函数定义中函数名的范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25826953/

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