宏定义
#define EOT 1 << 0
是规定在预编译时,把 下面程序中 遇到的 词 EOT 用 字符串 1 << 0 替代。
所以 不能 换成 字符 1。
例如:
#define EOT 1 << 0
int x=1;
x = x + EOT + 2;
printf("%#x ", x);
和
#define EOT 1
int x=1;
x = x + EOT + 2;
printf("%#x ", x);
得到的结果 不同。前者 0x8, 后者 0x4
--------
除非你已看过整个程序,你能确认 用 1 << 0 替代 和 用 1 替代 结果 一样。
#define E1 1<<0
#define E2 1
E1+4 // 结果是16
E2+4 // 结果是5
至于是BUG还是故意如此,在下就不知道了