【发布时间】:2020-12-29 06:55:22
【问题描述】:
在阅读了 Stack Overflow 帖子 (What does the comma operator , do?) 上的几个答案后,我在玩 , operator。此外,在阅读了这篇文章后,我正在使用, 分隔符:comma operator and comma seperator in c++。考虑以下两个代码 sn-ps:
代码 1
#include<stdio.h>
int main(void)
{
int a, b; /* comma functions as a separator */
a = 5, b=9; /* NOT SURE how comma functions */
printf("a = %d \n",a) , printf("b = %d \n",b); /* comma functions as an operator */
}
代码 2
#include<stdio.h>
int main(void)
{
int a, int b; /* not allowed - compiler error ... NOT SURE how comma functions */
a = 5, b=9; /*NOT SURE how comma functions */
printf("a = %d \n",a) , printf("b = %d \n",b); /*comma functions as an operator */
}
顶部代码(代码 1)很好...并打印出 a=5 和 b=9;但是,底部代码(代码 2)没有通过编译器并引用 int a, int b ; 行作为有罪的行为。
这两个代码 sn-ps 中包含了很多问题,但我会列出我最关心的问题:
-
在语句
a=5,b=9;中,,是作为分隔符还是运算符?我在初始化语句中读到过,逗号用作分隔符。但是,鉴于我对逗号运算符的作用的理解,我觉得将此逗号归类为运算符也是有道理的。 -
为什么不允许
int a, int b?如果允许逗号充当运算符,那么这肯定是有道理的,对吧?int a将首先被评估,它会产生用a标识符标记内存中某个位置的副作用,然后int b将以类似的方式处理。因此,似乎编译器在这种情况下不想改变,的解释(即它只想将其视为分隔符)。
非常感谢您的解释!谢谢~
【问题讨论】:
-
1) 是一个运算符,
a=5,b=9;是一个完整的表达式,返回值9。 2)int a将首先被评估 -int a不是要评估的表达式,它是一个定义。所以在它周围放置运算符是没有意义的。 -
@EugeneSh 您能否详细说明一下您所说的“不是要评估的表达式”是什么意思?我不确定我是否理解。语句“int a;”在编译时正在“评估”,对吧?
-
port70.net/~nsz/c/c11/n1570.html#6.5 - 第 6.5 节 - 表达式
-
@EugeneSh 啊。很棒的链接。谢谢!因此,为了澄清起见,“int a”不是表达式,因为它不包含运算符。是吗?
标签: c declaration comma comma-operator