【发布时间】:2013-10-08 04:19:27
【问题描述】:
#include<stdio.h>
#define prod(a,b) ((a>b)?a*a:b*b)
int prod1(int a,int b){
return ((a>b)?a*a:b*b);
}
int main(){
int p=0,q=-1;
int p1=0,q1=-1;
printf("%d ",prod(p1++,q1++));
printf("%d ",prod1(p++,q++));
return 0;
}
输出是: 1 0
为什么不一样?宏定义与函数定义有何不同,为什么会产生不同的结果?不是所有2个输出都等于0吗?
【问题讨论】:
-
有什么不同?有什么不同?
-
多次修改未排序的变量是未定义的行为。
-
在第一种情况下(使用宏时)您有未定义的行为。手动展开宏,您会看到您对
p和q对象进行了未排序的访问和修改。 -
回答这个问题无异于助长懒惰。
-
@hacks 你学得很快。 :P