XLC 11.1的怪异问题

Weird issue with XLC++ 11.1

本文关键字:问题 XLC      更新时间:2023-10-16

也许这是一个不良编程的情况,但是它以XLC 从6.0升级到11.1

表现出来

代码看起来像:

     int startAt = 140;
 startAt = parseAndSaveResponseINSTANTID_MODEL(response, startAt);
 COUT << "After tokenize INSTANTID_MODEL startAt=" <<startAt <<ENDL;
    startAt = startAt++;
    startAt = parseAndSaveResponseINSTANTID_CHRON_HISTORY(response, startAt);
COUT << "After tokenize INSTANTID_MODEL startAt=" <<startAt <<ENDL;
    startAt = startAt++;
    startAt = parseAndSaveResponseINSTANTID_FOLLOWUP_ACTION(response, startAt);
COUT << "After tokenize TSTID_INSTANTID_FOLLOWUP_ACTION startAt=" <<startAt <<ENDL;
startAt = startAt++;
    startAt = parseAndSaveResponseINSTANTID_RISK_INDICATOR(response, startAt);
COUT << "After tokenize TSTID_INSTANTID_RISK_INDICATOR startAt=" <<startAt <<ENDL;

以及在每种解析方法中,我们进行return (startAt + 1 + vRows * 81);

vrows在所有方法中均为零。

使用旧编译器,输出看起来像:

 After tokenize INSTANTID_MODEL startAt=141
 vRows=0
 After tokenize INSTANTID_MODEL startAt=142
 vRows=0
 After tokenize TSTID_INSTANTID_FOLLOWUP_ACTION startAt=143
 vRows=0
 After tokenize TSTID_INSTANTID_RISK_INDICATOR startAt=144

但是,使用新编译器,输出看起来像

 After tokenize INSTANTID_MODEL startAt=141
 vRows=0
 After tokenize INSTANTID_MODEL startAt=143
 vRows=0
 After tokenize TSTID_INSTANTID_FOLLOWUP_ACTION startAt=145
 vRows=0
 After tokenize TSTID_INSTANTID_RISK_INDICATOR startAt=147

整数/返回的方式是否存在变化?

startAt = startAt++是未定义的行为。因为它是不确定的,所以编译器可以自由地给出任何感觉,就像在6.0版中一样,版本11.1中的另一个结果。

; - )

使用GCC,-Wsequence-point(或-Wall)会发出此构造的警告。不确定XLC中是否有同等警告。