J..*_*..S 5 c gcc variable-assignment comma-operator
我在gcc中尝试了以下代码:
#include<stdio.h>
int main()
{
int a=3,2,1;//////////////////////ERROR!//////////////////////////
printf("%d", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望它能成功编译为:
那么,整数变量a的值应该是1吗?还是3?
当我尝试执行此程序时,为什么会出现此错误?
错误:预期标识符或'('在数字常量之前
SLa*_*aks 12
这被解析为一个由三部分组成的变量声明,带有两个无效变量.
您需要将整个初始化程序包装在括号中,以便将其解析为单个表达式:
int a=(3,2,1);
Run Code Online (Sandbox Code Playgroud)
如果将初始化与声明分开,您可能会得到您所期望的结果:
int a;
a = 3, 2, 1; // a == 3, see note bellow
Run Code Online (Sandbox Code Playgroud)
或者
int a;
a = (3, 2, 1); // a == 1, the rightmost operand of 3, 2, 1
Run Code Online (Sandbox Code Playgroud)
因为您的原始命令在语法上不正确(它是声明,因此它期望声明其他变量而不是数字2和1)
注意:左操作数评估的所有副作用都会在开始右操作数评估之前完成。
所以
a = 3, 2, 1
Run Code Online (Sandbox Code Playgroud)
其中有 3 个逗号运算符a = 3,2并且1从左到右计算,因此第一个计算是
a = 3, 2
Run Code Online (Sandbox Code Playgroud)
结果 2 (右操作数)(顺便说一下,它没有分配给任何变量,因为左操作数的值a = 3只是3),但在给出此结果之前a = 3,它完成了左操作数的副作用,即分配3给变量a. (感谢AnT的观察。)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |