C - a=3,2,1;在gcc中给出错误



我在gcc中尝试了以下代码:

#include<stdio.h>
int main()
{
    int a=3,2,1;//////////////////////ERROR!//////////////////////////
    printf("%d", a);
    return 0;
}

我希望它能成功编译为:

  • 一系列以逗号分隔的整数表达式将从左到右求值,最右边的表达式的值将成为逗号分隔的整个表达式的值。

那么,整型变量a的值应该是1,对吗?还是3?

为什么我得到这个错误当我试图执行这个程序?

错误:期望的标识符或'('前的数字常量

它被解析为一个由三部分组成的变量声明,其中包含两个无效变量。

您需要将整个初始化式包装在圆括号中,以便将其解析为单个表达式:

int a=(3,2,1);

如果你把初始化和声明分开,你可能会得到你想要的:

int a;
a = 3, 2, 1;     // a == 3, see note bellow

int a;
a = (3, 2, 1);   // a == 1, the rightmost operand of 3, 2, 1

作为您的原始命令在语法上不正确(它是声明,因此它期望其他变量声明而不是数字21)

注释:左操作数求值的所有副作用都在开始右操作数求值之前完成。

a = 3, 2, 1

是三个逗号运算符a = 3, 21,从左到右求值,因此第一次求值为

a = 3, 2

的结果2(右操作数)(顺便说一下,没有将赋值给任何变量,因为左操作数a = 3的值只是3),但是在给出该结果之前完成了左操作数的副作用a = 3,即将3赋值给变量a。(感谢AnT的观察)

相关内容

  • 没有找到相关文章