很简单的代码在不同编译器(优化选项:默认)下的表现,如果需要移植,结果非你所愿!

C员外 2007-03-15 10:38:56
#include<stdio.h>

void main()
{
int x=10;
volatile int y=3; //volatile特性在v2005下打开有差异
printf("%d,%d\n",(x++,y),y++);

getchar();
}
////////以下运行结果
suselinux10 gcc:4,3
win2/xp+vc6 :3,3 //使用不使用volatile,都一样
xp+vs2005 :3,3 //无volatile
xp+vs2005 :4,3 //使用volatile

如果该代码需要跨平台移植,这种问题该怎么防范?
...全文
208 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2007-03-15
  • 打赏
  • 举报
回复
凡是有++/--并且变量多次求值的,其结果就不确定。
所以,先用局部变量存储(x++,y)、y++的值再用局部变量调printf。
mLee79 2007-03-15
  • 打赏
  • 举报
回复
有未定义行为的代码没啥必要移植吧 ..
softwarewander 2007-03-15
  • 打赏
  • 举报
回复
改写代码吧。 这种代码是不好的风格
softwarewander 2007-03-15
  • 打赏
  • 举报
回复
先占沙发
……

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧