【问题标题】:warning: left-hand operand of comma expression has no effect警告:逗号表达式的左操作数无效
【发布时间】:2010-10-15 15:49:53
【问题描述】:

我看到了这个警告 如何解决?

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

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

【问题讨论】:

  • 你必须告诉我们你想让Table[i, temp3]做什么。
  • 警告告诉您Table[i, temp3] 可能不是您的意思,因为它等同于Table[temp3]。如果Table 是一个多维数组或指针数组,或许应该是Table[i][temp3]
  • 您能否提供 Table 是如何定义的?

标签: c compiler-construction warnings


【解决方案1】:

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

Table[i][temp3]

在你的代码中

[i, temp3]

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

【讨论】:

  • @user:那么考虑接受这个答案。 (点击答案左侧的绿色箭头。)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    编辑:我再解释一下,可能对你有用。我不会 100% 准确,只是为了让您了解正在发生的事情。

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

    那么如果table[i] 是表的一行,也就是另一个数组,那么如何访问列j?嗯,你得去row[j],也就是table[i][j]

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

    【讨论】:

      【解决方案4】:

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

      编辑:由于我的速度慢到可以被几个答案打败,所以我会添加一些内容,以便我的答案不仅仅是之前答案的重复:i, temp3 的真正含义是什么?好吧,C99 标准解释了:

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

      所以Table[i, temp3] 的意思是“评估 i,然后访问 Table 中的元素编号 temp3。因此编译器会警告您 i 没有做任何事情(因为评估 i 不会产生任何副作用)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-09
        • 1970-01-01
        相关资源
        最近更新 更多