是否有可能在GCC/Clang上强制进行尾调用优化?

Eon*_*nil 7 c clang tail-call-optimization

我正在尝试尽可能用C编写功能样式的程序.我知道像GCC/Clang这样的优秀编译器可以默默地进行尾部调用优化,但是不能保证.是否有任何选项可以强制编译器进行尾调用优化?(当然只有在它自己结束时才被调用)

SK-*_*gic 6

Clang根本没有做任何优化.有一个LLVM传递tailcallelim可以做你想要的(但不保证).您可以单独运行它opt.

  • 或者,您可以调整clang驱动程序以确保它明确地运行此传递. (3认同)

小智 5

Clang 13“musttail”属性强制尾递归函数中的尾调用优化,即使优化被禁用。

https://clang.llvm.org/docs/AttributeReference.html#musttail

用法:

int f(int x) {
  ...
  __attribute__((musttail)) return f(x-1);
}
Run Code Online (Sandbox Code Playgroud)