c语言,不同的编译器会得出不同的结果?

#include<stdio.h>#defineS(y)((y)*(y))intmain(void){inti=1;while(i<=5){printf("%d\n",S... #include <stdio.h>
#define S(y) ((y)*(y))
int main(void)
{
int i=1;
while(i<=5)
{
printf("%d\n",S(i++));
}
getchar();
return 0;
}

我用的C_Free 得出的结果是1 9 25
但是书上写的是 2 12 30
有些人得出的也是 2 12 30
展开
 我来答
匿名用户
2015-09-15
展开全部
应该是2 12 30

这里是典型的宏定义的负效应
S(i++)代换完就是(i++)*(i++)

不管按照什么次序,比如
i=1, 先算i++返回1,而i的值变成了2,后面一个i++,返回2,则i的值变成了3
以下类推
zjfaok
2015-09-15 · TA获得超过6805个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1576万
展开全部
百度搜索“未定义行为”的话,搜索结果里面出现最多的表达式恐怕就是(i++)*(i++)这种了。至于“未定义行为”具体是什么含义,搜索结果大概会有说明
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式