警告:逗号表达式的左侧操作数无效

时间:2010-10-15 15:49:54

标签: c compiler-construction warnings

我看到了这个警告 怎么办呢?

Temp += (Table[i, temp3] - (MSB[i] ^ 0x1));

警告:逗号表达式的左侧操作数无效

4 个答案:

答案 0 :(得分:4)

什么是Table对象?如果它是二维数组,那么你应该写

Table[i][temp3]

在您的代码中

[i, temp3]

是一个逗号运算符 - 它计算第一个参数(i),忽略它并返回temp3,所以如果Table是某种接受单索引访问其对象的容器,你就可以删除i

答案 1 :(得分:2)

逗号运算符从左到右计算任意数量的表达式,并得到最右边的表达式。

您在Table[i, temp3]中有逗号,与Table[temp3]完全相同。您是否尝试Table[i][temp3]访问二维数组中的某个位置?

编辑:我会再解释一下,它可能对您有用。我不会100%准确,它只是让你知道发生了什么。

为什么必须使用两对括号来访问“表格”中的“单元格”?使用一维数组,array[i]将使您进入数组的第i个元素,对吧?好吧,使用二维数组,让我们像你一样称它为表,table[i]也会让你进入第i个元素。但是这一次,该元素是另一个数组:表的第i行。

因此,如果table[i]是表的一行,这只是另一个数组,那么如何访问列j?好吧,你必须转到row[j]table[i][j]

C中的多维数组是“数组数组”。

答案 2 :(得分:2)

语法错误 - 如果Table是二维数组,请使用Table[i][temp3]

答案 3 :(得分:1)

i, temp3你是什么意思?如果Table是2D数组,则使用Table[i][temp3]访问元素(i,temp3)。

编辑:由于我的速度很慢,可以被多个答案击败,我会添加一些内容,以便我的答案不仅仅是之前的答案:i, temp3实际意思?嗯,C99标准解释说:

“逗号运算符的左操作数被计算为void表达式;有一个 评估后的序列点。然后评估右操作数;结果有它 类型和值.97)如果尝试修改逗号运算符的结果或 在下一个序列点之后访问它,行为是未定义的。“

所以Table[i, temp3]的意思是“评估i,然后访问Table中的元素编号temp3。因此编译器警告你我没有做任何事情(因为评估我没有产生任何一方 - 效果)。