首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XLC++ 11.1的奇怪问题

XLC++ 11.1的奇怪问题
EN

Stack Overflow用户
提问于 2012-10-29 22:57:43
回答 1查看 107关注 0票数 0

也许这是一个糟糕的编程案例,但随着XLC++从6.0升级到11.1,这一点正在显现出来

代码如下所示:

代码语言:javascript
运行
复制
     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都为零。

使用旧的编译器,输出如下所示:

代码语言:javascript
运行
复制
 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

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

代码语言:javascript
运行
复制
 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

处理整数/返回的方式有变化吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-29 23:25:11

startAt = startAt++undefined behaviour。因为它是未定义的,所以编译器可以自由地给出它想给出的任何结果,就像6.0版中的这个结果和11.1版中的不同结果。

;-)

对于GCC,-Wsequence-point (或-Wall)将对此构造发出警告。不确定XLC中是否有相同的警告。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13124121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档