$ clang --version
clang version 5.0.0 (tags/RELEASE_500/final)
CC ../../py/nlrthumb.c
../../py/nlrthumb.c:79:5: error: non-ASM statement in naked function is not supported
return 0; // needed to silence compiler warning
为什么Clang不支持non-ASM statement in naked function
?
这适用于gcc
。
裸体功能没有序言或结语,所以这样做 除了内联汇编之外的任何其他代码都是完全的 命中或错过。
那么gcc
怎么做呢?
答案 0 :(得分:3)
我应该把它写成答案而不是评论。问题是:
为什么Clang不支持裸函数中的非ASM语句?这在gcc上工作正常。
答案是这个并不在gcc中正常工作。从gcc docs引用naked
属性:
只有基本的asm语句可以安全地包含在裸函数中。虽然使用扩展的asm或基本的asm和C代码的混合似乎可行,但它们不能依赖于可靠地工作而且不受支持。
如果用一种不那么模糊的方式来表达这一点,我就无法想出来。
请注意,虽然上面的具体链接适用于ARM(这是我猜测OP正在使用的),但我相信同一文本适用于支持naked
的所有平台。