C 中的表达式。尽管有分号,赋值表达式还是这样吗?

问题描述 投票:0回答:1

我目前正在学习 C,在一张幻灯片中教授指出,添加到表达式中的分号使其成为一个声明。另一方面,它提到所有赋值都是表达式。即使这些分配需要额外的行并且必须用分号分隔。

看这里: 整数a、b、c; a = b = c = 10;

int a,b,c;
b = 2; 
c = 3;
a = b + c;

这些会被视为所有表达式吗?或声明

尝试查看资源并得到相互矛盾的答案

c operators expression assignment-operator statements
1个回答
0
投票

你的老师说的是正确的,但前提是你以特殊的方式阅读它。

C 中的赋值是一个表达式,因为您可以说

f( x = 5 )
,在这种情况下,5 被分配给 x,但这是一个计算结果为 5 的表达式,然后该值作为参数传递给
y()
。请注意,大多数程序员认为这令人困惑,并且通常不会通过代码审查。

同样,人们经常这样做

if( booleanVariable = booleanFunction() ) { ... }
,这也被认为是令人困惑的,尽管因为它经常使用而稍微少一些。

现在,这也是 C 语言中的一个表达式:

a
。 (其中
a
之前已声明为某种类型的变量。)通过在其后面写入分号,您可以将其用作表达式,如下所示:

int a = 5;
a;
printf( "Hello" );

这是有效的 C。它应该产生一个警告(“语句无效”),如果没有,则意味着您正在尝试编写代码,而没有首先弄清楚如何在编译器上启用所有警告,但是那是另一个故事了。事实是,如果您忽略警告,这是可以编译并运行的有效 C。

© www.soinside.com 2019 - 2024. All rights reserved.