0

最近我遇到了这段代码:

#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等。如果我们得到一个堆栈跟踪、内存不足、任何可以使这个解决方案有用的东西,会不会发生可怕的事情?

我是一个极简主义者,如果我们能得到更少的线条就更好了。但是我在这里错过了什么吗?这是故意的还是一种不好的编码习惯?

4

1 回答 1

1

对可变参数宏的预处理器支持在我看来是唯一的好理由。我们的项目已经有几十年了LOG, LOG1 etc,但确实升级到了...最近。

根据维基百科:

一些编译器在编译 C 和 C++ 代码时支持可变参数宏:GNU Compiler Collection 3.0、[2] Visual Studio 2005、[3] C++Builder 2006 和 Oracle Solaris Studio(以前称为 Sun Studio)Forte Developer 6 update 2 (C++ 5.3 版)。[5] GCC 在编译 Objective-C 时也支持这样的宏。

如果您了解您的平台,请使用花哨的可变参数宏。如果支持的人很少,那么事情可能会变得更有趣

于 2013-02-22T09:07:45.890 回答