1、a++不能作为左值
int a = 10;
++a = 1;//ok
a++ = 1;//error
a++是先使用a的值作运算,然后再使a的值增加1,如果允许执行a++左值的赋值运算,那么就要在赋值运算之后使a值再增加1,这样赋值运算就没意义了,a最终的结果不是赋值后的结果。
2、#error指示符
指令将使编译器显示一条错误信息,然后停止编译
3、ASSERT 和 VERIFY
在DEBUG模式下,两个宏的功能是一样的,两者都对表达式进行计算,如果表达式为非0,那么什么也不做,如果表达式为0,那么输出诊断信息;在RELEASE模式下,ASSERT不会对参数里的表达式进行计算,VERIFY会计算里面的表达式(如果是函数,将会调用该函数)
部分定义如下:
#ifdef _DEBUG
#define VERIFY(f) ASSERT(f)
#else
#define ASSERT(f) ((void)0)
#define VERIFY(f) ((void)(f))
#endif