是否有任何理由不使用'定义'变量参数长度?

时间:2013-02-22 08:59:33

标签: c c-preprocessor variadic-functions

最近我发现了这段代码:

#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宏,仅此而已。更不用说我们不必添加LOG5LOG6等。如果我们得到堆栈跟踪,内存耗尽,任何会使此解决方案变得有用的东西,那会发生什么可怕的事情?

我是一个极简主义者,如果我们可以越少越好。但我在这里错过了一些东西吗?这是故意还是编码不好?

1 个答案:

答案 0 :(得分: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 ++ version 5.3)。[5] GCC在编译Objective-C时也支持这样的宏。

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