我是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 ++有问题,但我不明白为什么这应该是一个问题。
感谢您的帮助。
答案 0 :(得分:2)
这是因为没有定义在C中计算函数参数的确切顺序。因此,您无法确定insertID++
的价值。要解决此问题,您应该在调用asprintf()