无法在lambda中使用asm函数?

问题描述 投票:1回答:1

Godbolt编译器中的以下代码段fails to compile

#define cli()  __asm__ __volatile__ ("cli" ::: "memory")

void (*q)() = [](){ cli(); };

错误是第1行的error: expected ')' before '::'

但是如果我将汇编函数包装在常规C函数中,则它是compiles fine

#define cli()  __asm__ __volatile__ ("cli" ::: "memory")

void foo() { cli(); }

void (*q)() = [](){ foo(); };

如何?

这是使用Arduino框架代码的最小示例,cli()定义来自框架本身。所以我不能更改它。

c++ avr-gcc
1个回答
0
投票

这是一个编译器错误。基于gcc 7或更早版本的编译器存在此错误。它在gcc 8中已修复。

((如果删除::: "memory"部分,则gcc 7编译成功。但是生成的程序集是错误的,cli放在lambda之外,godbolt

© www.soinside.com 2019 - 2024. All rights reserved.