avr-gcc从不返回主优化

Vin*_*lex 2 c gcc avr

我曾读到,如果我从来没有从回main()圈,我可以抽出〜66个字节,而在一些编译器开关avr-gcc,但我无法再找到该网站。

这是针对嵌入式的:

main() {
 while(1)
 {
   // do stuff
 }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_* L. 5

因为gcc您可以使用特殊属性来指示您的函数不返回:

int main() __attribute__ ((noreturn)) {
    for (;;) {
         // do stuff
    }
    __builtin_unreachable ();
}
Run Code Online (Sandbox Code Playgroud)

(可选)您可以添加__builtin_unreachable ();以指示代码的某些部分永远无法到达。

尽管在大多数情况下可以通过优化标志正确识别,但如果没有优化标志,while(1)则生成的代码可能超过for(;;)