对于许多可以使用函数的快速任务f(x,y)
,在纯C中使用宏。我想具体询问这些情况,这些情况可以通过函数调用解决(即,用于内联函数的宏,而不是用于任意代码的代码扩展的宏)。
通常不内联C函数,因为它们可能是从其他C文件链接到的。但是,静态C函数仅在定义它们的C文件中可见。因此,编译器可以内联它们。我听说,应该将许多宏替换为静态函数,因为它们会生成更安全的代码。
在某些情况下这不是一个好主意吗?
再说一遍:根本不问具有完全无法表示为函数的具有##相似构造的Code-Production宏。
4
我认为您的问题可能在此处stackoverflow.com/questions/9104568/macro-vs-function-in-c和此处stackoverflow.com/questions/1358232/why-use-macros-in-c
—
Maru
编写适当的宏很痛苦,
—
棘手的怪癖
inline
ing函数只能确保可以在二进制文件中多次定义它,编译器可以决定是否实际上将其内联以节省空间
我实际上会怀疑其中大多数是历史原因。以前,C编译器根本没有内联函数。因此人们将宏用于需要内联的事情。C代码通常寿命很长。
—
Jan Hudec
@ratchetfreak:C没有
—
wirrbel
inline
,这与C ++无关。
@wirrbel当然
—
阿蒙(Amon)
inline
在C中,至少从C99开始。有关快速概述,请参见Wikipedia的内联函数。