关于c语言的宏,我肯定许多人一定有过惨痛的经验。几年前一个典型的错误让我找了一天:
#define MACRO_1 5
#define MACRO_2 MACRO_1 + 1
int a = MACRO_2 * 3;
我希望的结果当然是a = 18,可是实际上大家应该都知道a是 5 + 1 * 3 = 8.
我以为这样的错误我不会再犯,可是前一阵我还是被一个几乎相同的错误给消耗了
一个下午:
#define PHY_ADDER 0x400000
#define PHY_ADDER_2 PHY_ADDER + 0x100000
int *p = (int *)PHY_ADDER_2;
指针p的值是多少?0x500000?那只是我想要的结果。
p = 0x400000 + 0x100000 * sizeof(int);
在我的机器上等于0x800000。你知道为什么吗?
指针的加法有这么点特性,如果你知道p++并不意味着p值只加了1你就知道为什么了。
一定要给你的宏加上括号!!
本文转载自IT网it求职笔试真题库网。