我研究过
内联说明符是编译器应尝试的提示 生成代码 [...] 内联,而不是为 函数一次,然后通过通常的函数调用调用 机制。
问题:
- 如果关闭了 GCC 编译器的优化,是否忽略内联说明符? 当递归调用内联函数
- 时,哪个编译器选项决定了"内联深度",直到它遵循正常的函数调用机制?
- 如果在 for 循环中调用内联函数,是否会出现相同的"内联深度"?
如果关闭了 GCC 编译器的优化,是否忽略内联说明符?
是的,如果在 GCC 中关闭了优化,则不会内联任何函数。它等效于在编译过程中使用-fno-inline
标志。查看此链接
-fno-inline
Don't pay attention to the inline keyword. Normally this option is used to keep the compiler from expanding any functions inline. Note that if you are not optimizing, no functions can be expanded inline.
当递归调用内联函数时,哪个编译器选项决定了"内联深度",直到它遵循正常的函数调用机制?
选项max-inline-recursive-depth
和max-inline-recursive-depth-auto
。默认深度为 8。
除了 -fno-inline 之外,您还需要使用 -fno-default-inline 来禁用类中的内联函数。当您使用 gdb 单步执行这些内联函数时,这很有用。