3

我有一个对 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")and的内容也会很有用WARN("value is",obj->printvalue())

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

4

3 回答 3

4

这是一种非常 C-ish 的处理方式。只需使其成为重载inline函数。任何名副其实的优化器都会内联调用。

于 2013-06-10T11:34:15.523 回答
3

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

于 2013-06-10T11:36:35.400 回答
0

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

于 2013-06-10T11:38:27.910 回答