一=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
因为您的原始命令在语法上不正确(它是 声明 ,所以它期望声明其他变量而不是数字 2
和 1
)
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 = 3
、2
和1
是从左到右求值的,所以第一个求值是
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的观察。)
我在 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
因为您的原始命令在语法上不正确(它是 声明 ,所以它期望声明其他变量而不是数字 2
和 1
)
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 = 3
、2
和1
是从左到右求值的,所以第一个求值是
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的观察。)