gpt4 book ai didi

C 错误 : Expected expression before int

转载 作者:太空狗 更新时间:2023-10-29 16:21:43 27 4
gpt4 key购买 nike

当我尝试下面的代码时,我得到了提到的错误。

if(a==1)
int b =10;

但是下面的句法是正确的

if(a==1)
{
int b = 10;
}

这是为什么?

最佳答案

这实际上是一个相当有趣的问题。它并不像乍看起来那么简单。作为引用,我将以 N1570 中定义的最新 C11 语言语法为基础。

我猜这个问题的反直觉部分是:如果这是正确的 C:

if (a == 1) {
int b = 10;
}

那为什么这不是正确的 C?

if (a == 1)
int b = 10;

我的意思是,单行条件 if 语句带或不带大括号都应该没问题,对吧?

答案在于 C 标准定义的 if 语句的语法。我在下面引用的语法的相关部分。简而言之:int b = 10 行是一个声明,而不是一个语句if 的语法statement 需要在它正在测试的条件之后的语句。但是,如果您将声明括在大括号中,它就变成了一个声明,一切都很好。

只是为了完整地回答这个问题——这与范围无关。存在于该范围内的 b 变量将无法从其外部访问,但该程序在语法上仍然是正确的。严格来说,编译器不应该对其抛出错误。当然,无论如何您都应该使用 -Wall -Werror 进行构建 ;-)

(6.7) declaration:            declaration-specifiers init-declarator-listopt ;            static_assert-declaration(6.7) init-declarator-list:            init-declarator            init-declarator-list , init-declarator(6.7) init-declarator:            declarator            declarator = initializer(6.8) statement:            labeled-statement            compound-statement            expression-statement            selection-statement            iteration-statement            jump-statement(6.8.2) compound-statement:            { block-item-listopt }(6.8.4) selection-statement:            if ( expression ) statement            if ( expression ) statement else statement            switch ( expression ) statement

关于C 错误 : Expected expression before int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22419790/

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