小编use*_*084的帖子

宏与静态内联?

使用宏而不是静态内联方法有什么显着的好处吗?特别是,如何使用静态内联方法在调用链中进一步实现可变参数的传递,而这可以通过宏一步完成?

#define myprintf(fmt, args...) printf (fmt, args)
Run Code Online (Sandbox Code Playgroud)

这只是一个简单的示例,但我仍然很好奇是否有一种等效的方法可以使用静态内联而不使用 va_args 步骤来执行此操作。

编译器是否总是内联静态内联方法?它们的尺寸又如何呢?调用任意子方法怎么样?如果我使用多个宏,所有宏都会编译成单个表达式,因此编译器可能更容易优化。编译器是否总是足够聪明,可以将多个级别的静态内联调用转换为单个表达式?

c c-preprocessor

6
推荐指数
1
解决办法
7984
查看次数

加速AVR函数指针

我有一个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!

我怎样才能让它更快?

avr atmega arduino

1
推荐指数
1
解决办法
1008
查看次数

标签 统计

arduino ×1

atmega ×1

avr ×1

c ×1

c-preprocessor ×1