C++ 无法在lambda中使用asm函数?
Godbolt编译器中的以下代码段:C++ 无法在lambda中使用asm函数?,c++,avr-gcc,C++,Avr Gcc,Godbolt编译器中的以下代码段: #define cli() __asm__ __volatile__ ("cli" ::: "memory") void (*q)() = [](){ cli(); }; 第1行的错误是“:”之前的“error:expected”) 但如果我将汇编函数包装为常规C函数,它: 怎么会这样 这是使用Arduino框架代码的一个简单示例,而cli()定义来自框架本身。所以我无法更改它。这是一个编译器错误。基于GCC7或更早版本的编译器存在此错误。它在gcc
#define cli() __asm__ __volatile__ ("cli" ::: "memory")
void (*q)() = [](){ cli(); };
第1行的错误是“:”之前的“error:expected”)
但如果我将汇编函数包装为常规C函数,它:
怎么会这样
这是使用Arduino框架代码的一个简单示例,而cli()
定义来自框架本身。所以我无法更改它。这是一个编译器错误。基于GCC7或更早版本的编译器存在此错误。它在gcc 8中是固定的
(如果删除::“memory”
部分,gcc 7的编译将成功。但是生成的程序集是错误的,cli
放在lambda之外,)在:
之间添加空格时,问题是否仍然存在?
#define cli() __asm__ __volatile__ ("cli" ::: "memory")
void foo() { cli(); }
void (*q)() = [](){ foo(); };