#define ASPECT_RATIO 1.653
ASPECT_RATIO可能从未被编译器看见;也可能在编译器开始处理源码前就被预处理器移走。这也就导致其可能没进入symbol table。
且对浮点常量而言,预处理器盲目地将宏名称替换,可能导致object code出现多份
解决之道:
const double ASPECT_RATIO = 1.653;
two points:
class GamePlayer { private: static const int Num = 5; //声明式 int scores[Num]; }
旧编译器也许不允许static成员在声明式获得初值,此时有两种方法可以解决:
class GamePlayer { private: enum { Num = 5 }; int scores[Num]; }
#define CALL_WITH_MAX(a,b) f((a) > (b) ? (a) : (b)) int a = 5,b = 0; //此时,a的调用次数取决于被拿来和谁比较 CALL_WITH_MAX( ++a, b ); //a累加两次 CALL_WITH_MAX( ++a, b + 10 ); //a累加一次
以inline替换类似函数的宏
总结: