最近我发现了这段代码:
#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
等。如果我们得到堆栈跟踪,内存耗尽,任何会使此解决方案变得有用的东西,那会发生什么可怕的事情?
我是一个极简主义者,如果我们可以越少越好。但我在这里错过了一些东西吗?这是故意还是编码不好?
答案 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时也支持这样的宏。
如果您了解您的平台,请使用花哨的可变参数宏。如果没有什么可以支持,那么事情可能会变得更有趣