【发布时间】:2016-04-19 17:52:39
【问题描述】:
作为作业的一部分,我被要求用 C 语言实现一个简单函数列表,并出于运行时效率的原因,尽可能用宏替换这些函数。
是否有一个通用规则可以帮助我确定是否可以用宏替换 C 中的简单函数?为什么这种替换能优化运行时效率?
感谢您的宝贵时间。
编辑:正如这里许多声音所指出的那样,这项任务的目标是在代码质量甚至在某些情况下效率方面适得其反。
【问题讨论】:
-
过于宽泛且基于意见。但一般来说,除非确实必要,否则不应使用宏。如果有疑问,请使用
inline函数。宏的用途与功能不同。阅读:gcc.gnu.org/onlinedocs/gcc-4.9.3/gcc/Inline.html#Inline -
@squeamishossifrage:我认为这个问题是针对内联(通过宏,因为 OP 似乎不知道
inline)与函数调用。 -
@Pietz:立即离开该课程。导师显然对 C 编程一无所知。我见过很多无意义的作业,但这是最糟糕的作业之一。它有效地教导了糟糕的编码风格。更重要的是,作为一个现代编译器,也很可能内联普通函数。
-
@Pietz 来说明 Olaf(和其他人)的意思,例如看一下 getc() 和其他 stdio 宏的实现。或者 (f)lex 的输出......如果你了解他们的工作,请回来。
-
@Pietz 问问给你这个任务的人是否在本世纪做过任何真正的编程。用宏替换函数是一个非常糟糕的主意,特别是因为我们从 C99 开始就有内联函数(并且在大多数编译器中很久之前)。内联通常会使运行时效率变差,绝对不应该由需要提出此类问题的人尝试。
标签: c performance function replace macros