【发布时间】:2011-05-04 00:39:27
【问题描述】:
可能重复:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)
#include<stdio.h>
#include<conio.h>
#define SQ(x) x*x
void main()
{
int a1 , a2;
int b1 , b2;
a1 = 2;
a2 = 2;
b1 = 0;
b2 = 0;
b1 = SQ(a1++);
b2 = SQ(++a2);
printf("Frist = %d",b1);
printf("Second = %d",b2);
}
我知道代码的输出是什么。
在其他程序中作为#define 工作 这样它就不能在上面的代码中工作 为什么。?
【问题讨论】:
-
当你编译并执行这个时会发生什么?错误?奇怪的结果?什么?
-
你期望的输出是什么,你得到了什么?我很确定在 x++ * x++ 和 ++y*++y* 中,第一个增量是否在第二个被评估时发生是未定义的,所以你得到的值会因环境而异
-
在你原来的问题中,有一个错字(
#deifne而不是#define)我现在更正了,确保你使用的代码是正确的。
标签: c macros undefined-behavior