使用宏而不是静态内联方法有什么显着的好处吗?特别是,如何使用静态内联方法在调用链中进一步实现可变参数的传递,而这可以通过宏一步完成?
#define myprintf(fmt, args...) printf (fmt, args)
Run Code Online (Sandbox Code Playgroud)
这只是一个简单的示例,但我仍然很好奇是否有一种等效的方法可以使用静态内联而不使用 va_args 步骤来执行此操作。
编译器是否总是内联静态内联方法?它们的尺寸又如何呢?调用任意子方法怎么样?如果我使用多个宏,所有宏都会编译成单个表达式,因此编译器可能更容易优化。编译器是否总是足够聪明,可以将多个级别的静态内联调用转换为单个表达式?
我有一个avr程序,我想使用指向方法的指针.但为什么使用函数指针超过正常调用几乎慢4倍?我该如何加快速度呢?
我有:
void simple_call(){ PORTB |= _BV(1); }
void (*simple)() = &simple_call;
Run Code Online (Sandbox Code Playgroud)
然后如果我用-O3编译并调用:
simple_call()
Run Code Online (Sandbox Code Playgroud)
完成需要250ns.如果我改为打电话:
simple()
Run Code Online (Sandbox Code Playgroud)
完成需要960ns!
我怎样才能让它更快?