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 展开
#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
以下类推
这里是典型的宏定义的负效应
S(i++)代换完就是(i++)*(i++)
不管按照什么次序,比如
i=1, 先算i++返回1,而i的值变成了2,后面一个i++,返回2,则i的值变成了3
以下类推
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询