本文翻译总结自《Advanced Mac OS X Programming 》第一章
1. 最核心的思想就是宏只是纯粹字面替换:
#define FIVE 5
int max = FIVE;
2. 变量要加括号:
#define SQUARE(x) x*x, 在计算SQUARE(3+5)的时候就会被替换成:3+5*3+5,正确的定义应该是#define SQUARE(x) (x)*(x)
3. 避免使用有副作用的运算,如SQUARE(i++),因为你不不知道会被展开成什么。
4. 在if中使用宏:
#define LOG_ERROR(desc)\
error_count++;\
fprintf(stderr, "Found an error '%s' at file %s, Line %d\n",\
desc, __FILE__, __LINE__)
在if代码中如果这样使用,就OK:
if(returnVal != 0){
LOG_ERROR("Here is an error!);
}
但是如果省略了大括号,将出现问题:
if(returnVal != 0) LOG_ERROR("Here is an error!);
代码将被展开为:
if(returnVal != 0)
error_count++;
fprintf(stderr, "Found an error