对于var ++,可能没有定义关于操作的奇怪警告

时间:2014-07-22 14:12:14

标签: c

我是C新手,但我目前正在开展一个项目,我遇到了一个奇怪的问题。

我有以下代码:

int insertID = 0;
asprintf(&inboundSql, "INSERT INTO DataTable VALUES (%i, %i, '%s', '%s', %i),"
        "(%i, %i, '%s', '%s', %i), (%i, %i, '%s', '%s', %i), (%i, %i, '%s', '%s', %i),"
        "(%i, %i, '%s', '%s', %i), (%i, %i, '%s', '%s', %i)",
        dataRow, D_DATE, callLogSearchData[dataRow].date, epochBuffer, insertID++,
        dataRow, D_TIME, callLogSearchData[dataRow].time, epochBuffer, insertID++,
        dataRow, D_APARTY, callLogSearchData[dataRow].aParty, epochBuffer, insertID++,
        dataRow, D_BPARTY, callLogSearchData[dataRow].bParty, epochBuffer, insertID++,
        dataRow, D_DURATION, durationBuffer, epochBuffer, insertID++,
        dataRow, D_RESULT, callLogSearchData[dataRow].cleardownCause, epochBuffer, insertID++);

编译代码时,我得到以下内容:

warning: operation on insertID may be undefined

即使我收到上述警告,我的代码也按预期运行,所以我不明白问题所在。我想它认为插入ID ++有问题,但我不明白为什么这应该是一个问题。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这是因为没有定义在C中计算函数参数的确切顺序。因此,您无法确定insertID++的价值。要解决此问题,您应该在调用asprintf()

之前正确计算要传递不同变量的值