gpt4 book ai didi

不能在 C 中的中流声明上有标签?

转载 作者:太空狗 更新时间:2023-10-29 15:13:48 27 4
gpt4 key购买 nike

所以在 C99 中是这样的:

label:
int ret = function(of, stuff);

给出一个编译时错误,而这个:

label:
;
int ret = function(of, stuff);

工作得很好。

这是编译器错误吗?或者这是 C 标准定义中的错误?或者,如果这是 C99 标准的一部分,也许有人会站出来为 C 标准辩护,声称这是完全合理的?

最佳答案

标签,在 N1256 中定义6.8.1 标签语句,只能包含语句

 Syntax  
1 labeled-statement:
identifier : statement
case constant-expression : statement
default : statement

int ret = function(of, stuff); 是一个声明,在 N1256 6.7 声明中定义,不是声明。

语句在 N1256 6.8 语句和 block 中定义如下:

 Syntax
1 statement:
labeled-statement
compound-statement
expression-statement
selection-statement
iteration-statement
jump-statement

复合语句 就是所谓的 block ,它是 0 个或多个被 {} 包围的声明和语句。

expression-statement 是 N1256 6.5 Expressions 中定义的零个或一个表达式,后跟分号,如 i++;。语法中的表达式在N1256 6.5.17 逗号运算符中定义。

selection-statementifswitch语句。

iteration-statementwhiledo-whilefor语句。

jump-statementgoto, continue, break and return 语句.

如您所见,声明不是语句,因此您不能为声明添加标签。

关于不能在 C 中的中流声明上有标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39049691/

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