我有一个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
可以解决这个问题(来自下面的答案)。
答案 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 */