【发布时间】:2013-02-07 20:12:08
【问题描述】:
最近我发现了这段代码:
#define LOG(type, str) printf(str)
#define LOG1(type, str,arg1) printf(str,arg1)
#define LOG2(type, str,arg1,arg2) printf(str,arg1,arg2)
#define LOG3(type, str,arg1,arg2,arg3) printf(str,arg1,arg2,arg3)
#define LOG4(type, str,arg1,arg2,arg3,arg4) printf(str,arg1,arg2,arg3,arg4)
代码是最近写的。所以我猜它可以用C99编译。
我的问题是:为什么不使用具有可变参数长度的简单宏?我们只会限制自己使用LOG 宏,仅此而已。更不用说我们不必添加LOG5、LOG6 等。如果我们得到堆栈跟踪、内存不足等任何可以使这个解决方案有用的东西,会不会发生可怕的事情?
我是一个极简主义者,如果我们能得到更少的线条就更好了。但是我在这里错过了什么吗?这是故意的还是一种糟糕的编码习惯?
【问题讨论】:
-
AFAIK 如果代码不是针对 C99,那么这是您编写宏的唯一方法。另外:我不知道为什么这不是一个函数。
-
@Jon,假设您不想登录发布版本,您可以节省整个函数调用事件。让我们不要走
__naked__。哦,这也会擦除日志行的所有字符串文字 -
@RomanSaveljev:你必须先让我相信,保存函数调用 很重要。 :-)
-
@Jon 没有宏就无法获得调用的
__LINE__,除非您将其写入每次调用,而且每次都写入log(__FILE__, __LINE__, ...)可能会令人不安。 -
@Jon Oh-oh.. 我为这样的遭遇准备了适当的咒语:管道冲洗!缓存未命中!功能内联无保证!卡达布拉!!
标签: c c-preprocessor variadic-functions