根据扩展汇编程序的gcc 文档:
当操作数的约束[...]允许寄存器时,您应该只使用读写操作数。
这似乎很明确:您不能使用 +m 作为输出。
然而,我已经看到它被做了很多次。事实上,Linus Torvalds在记录中说
gcc 文档是次要的。它们没有更新,它们不正确,它们不反映现实,它们无关紧要。对于这样的事情,唯一正确使用的是“+m”
如果编译器最终会搞砸我的代码,我不想使用 +m 。甚至检查输出 asm 以查看它是否工作并不意味着明天当我更改一些看似无关的东西时它仍然可以工作。或者当我获得 gcc 的下一次更新时它仍然可以工作。
如果文档是正确的并且我不能依赖它正常工作,我想知道这一点,以便我可以寻求其他选择(其中大部分都是令人不快的痛苦)。如果文档有误,请告诉我如何更正它们。