比较下面两种代码:
代码一:
#ifdef MY_MACRO
void MyFunction(...) {
......
}
#else
void MyFunction(...) {
......
}
#endif
代码二:
void MyFunction(...) {
#ifdef MY_MACRO
......
#else
......
#endif
}
前者无疑比后者清晰,它们分离成独立的函数,但事实上它们并不是没有关联的独立函数。它们接口相同,必须满足相同的语义。前者的写法斩断这种关联换来清晰的代码,其中的一个代价是修改其中一个函数的接口可能会忘记修改另一个。