若有如下定义和语句int i=3,j;j=(++i)+(++i)+--i;执行后i,j的值分别是?为什么?
1个回答
展开全部
计算结果 与编译器有关,与编译的优化选择有关。
i 没问题 得 4。
因为 i=3; --i 得 2, (++i) 得 3, 再 (++i) 得 4。最终 i=4.
j 的结果 就不一定了。
例如: MS VC++ 编译器优化 /O1, /O2, /Og 等, j =12;
/Od 和 默认 得 j=14.
至于问 “为什么”,只有编译器 生产商 或设计者 才知道。普通使用者难猜。
程序员写程序时要 避免 这种 含义不清,多义性的语句。
例如分开写成: a=i+1; b=i+1; c=i-1; j=a+b+c; 那就无2义性。也就不必浪费时间去研究j得几,为何得几。
i 没问题 得 4。
因为 i=3; --i 得 2, (++i) 得 3, 再 (++i) 得 4。最终 i=4.
j 的结果 就不一定了。
例如: MS VC++ 编译器优化 /O1, /O2, /Og 等, j =12;
/Od 和 默认 得 j=14.
至于问 “为什么”,只有编译器 生产商 或设计者 才知道。普通使用者难猜。
程序员写程序时要 避免 这种 含义不清,多义性的语句。
例如分开写成: a=i+1; b=i+1; c=i-1; j=a+b+c; 那就无2义性。也就不必浪费时间去研究j得几,为何得几。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询