本帖最后由 Simon21ic 于 2011-1-12 03:17 编辑
简单代码:
int allow_transports(struct command_context *ctx, const char **vector)
{
....
while (*vector)
LOG_DEBUG("allow transport '%s'", *vector++);
....
}
vector是一个字符串数组,第一个不是NULL,最后一个是NULL。
#define LOG_DEBUG(expr ...) \
do { \
if (debug_level >= LOG_LVL_DEBUG) \
log_printf_lf(LOG_LVL_DEBUG, \
__FILE__, __LINE__, __func__, \
expr); \
} while (0)
LOG_DEBUG是判断调试等级,如果大于LOG_LVL_DEBUG,就调用log_printf_lf打印调试信息。
首先:
这个那么简单的代码,还是有问题的。
建议:
用比AnsiC还要简化的PlainC,无任何“花哨”的写法,出问题的几率最小。
C语言的最高等级:
忘记,忘记优先级,忘记自增自减的先后顺序,把PlainC可以解决的问题,都忘记了。。。
当然,还有其他的经验,比如宏的所有参数,都带()。{}不省略。宏定义中的do{}while(0)等等。 |