C"inline"关键字的替代品

The*_*ker 3 c compiler-construction inline inline-code compiler-optimization

从我的课程讲师,他反复强调并要求我们不要使用"内联"关键字来实现功能.他说它不是编译器的"可移植"而不是"标准".考虑到这一点,是否存在允许"内联扩展"的"标准"替代方案?

pax*_*blo 18

你的课程讲师错了.这标准的.它实际上是目前的标准,正确的,在部分6.7.4 Function specifiers(C99).对编译器的建议可能完全被忽略的事实并没有使它变得不那么标准.

我认为它不是在C89/90中可能是某些嵌入式编译器使用的,但在这种情况下我会认真考虑升级.

然而,即使在inline可用的地方,我通常会将这些决定留给编译器本身,因为大多数现代的决策都能够找出如何最好地优化代码(通常远比我好).该inline关键字,像registerauto,是不是我通常担心的.

您可以使用宏,因为这是相对简单的文本替换,通常在编译阶段之前发生,但您应该了解限制和缺陷.

或者您可以手动内联代码(即复制它),虽然我不建议将其作为选项,因为它可能很快成为维护噩梦.

我自己,我会使用普通函数编写代码而不使用任何这些技巧,然后在必要时引入它们(并且只有当你能证明它们是需要的时候,例如特定的性能问题).

你应该总是假设必须维护你的代码的编码员是一个知道你住在哪里的心理变态杀手:-)

  • +1这里要记住的重要一点是,即使`inline`关键字是标准的,编译器现在已经达到了一个点,它们比大多数时候更聪明.你的教授*可能*得到的是你根本不应该自己做出这些决定,而是让它由编译器决定何时最合适. (6认同)