C++ 无法在lambda中使用asm函数?

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

Godbolt编译器中的以下代码段:

#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(); };