一=3,2,1;在 gcc 中给出错误

a=3,2,1; gives error in gcc

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

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

我希望它能成功编译为:

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

为什么我在尝试执行此程序时会收到此错误消息?

error: expected identifier or '(' before numeric constant

这被解析为包含两个无效变量的三部分变量声明。

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

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

Note: All side effects from the evaluation of the left-operand are completed before beginning the evaluation of the right operand.

所以

a = 3, 2, 1

这3个逗号运算符a = 321是从左到右求值的,所以第一个求值是

a = 3, 2

which result 2 (right-operand) (顺便说一句 not assigned to any variable, as the value左操作数 a = 3 只是 3),但是 在给出这个结果之前 它完成了左操作数的副作用 a = 3,我. e.将 3 分配给变量 a。 (感谢AnT的观察。)