摘要: 当宏参数在宏定义中出现超过一次,这个宏作用在复杂的表达式里就可能出错,导致不可预料的结果,我还记得我有一次为这个问题导致的出错,查了一个星期,最后整整debug了一个工作日才找到这个问题,所以提醒大家一定要小心。 比如 #define MAX(a, b) ( (a) > (b) ? (a) : (b) ) #define ABS(x) ( (x) > 0 ? (x) : (-x) )定义 int j = 5, k =8;正常情况: MAX(j, k); ABS(j, k) 都OK, 但是下面这种情况呢?MAX(j++, k++); ABS(j++); 如果无意中在代码里出现上面这种 阅读全文
posted @ 2008-08-27 17:16 MXi4oyu 阅读(251) 评论(0) 推荐(0) 编辑
摘要: func( Type para1, Type para2, Type para3, ... ){ /****** Step 1 ******/ va_list ap; va_start( ap, para3 ); //一定要“...”之前的那个参数 /****** Step 2 ******/ //此时ap指向第一个可变参数 //调用va_arg取得里面的值 Type xx = va_arg( ap, Type ); //Type一定要相同,如: //char *p = va_arg( ap, char *); //int i = va_arg( ap, int ); //如果有多个参... 阅读全文
posted @ 2008-08-27 16:40 MXi4oyu 阅读(201) 评论(0) 推荐(0) 编辑