C ++ #define变量参数函数

时间:2013-06-10 11:30:20

标签: c++ macros c-preprocessor

我有一个CPU敏感的应用程序,并希望最小化函数调用。我想写一些类似的东西:

#ifdef condition        
#define f(a,b) ff(a,b)   
#define f(a) ff(a)    
#endif    

但编译器会将f视为多次定义。我想使用__VAR_ARGS__,但在上面的示例中b属于enum类型。有没有正确的方法来执行此操作,或者我应该将f(a,b)重命名为f2(a,b)

澄清定义,如果激活,则添加对处理数据以打印到文件/标准输出的函数的调用,否则它们将被替换为空行,所以在我看来这种方法会改善代码大小,因为宏是单行像INFO(object->contents)这样的关键字我觉得它更具可读性。如果我可以添加WARN("message")WARN("value is",obj->printvalue())之类的内容,那么它也会非常有用。

我也认为inline可以解决这个问题(来自下面的答案)。

3 个答案:

答案 0 :(得分:3)

这是一种非常接近这种方式的C-ish方式。只需使其成为一个重载的inline函数。任何名副其实的优化者都会在电话中插入内容。

答案 1 :(得分:3)

我的第一个猜测是你在错误的领域进行优化。在这种情况下,优秀的编译器将优化。混淆代码会使编译器更难以这样做。

答案 2 :(得分:0)

从c ++书中找到答案:
宏名称不能超载:
     #define PRINT(a ,b ) cout <<(a )<<(b )
     #define PRINT (a ,b ,c ) cout <<(a )<<(b )<<(c ) /* trouble?: redefines, does not overload */