正如标题所说; inline 关键字和#define 预处理器指令在实践中有什么区别?
最佳答案
#define
是一个预处理器工具,具有宏语义。考虑一下,如果 max(a,b)
是一个定义为
#define max(a,b) ((a)>(b)?(a):(b))
:
示例 1:
val = max(100, GetBloodSample(BS_LDL))
会导致额外的无辜者流血,因为该函数实际上会被调用两次。这可能意味着实际应用程序的显着性能差异。
示例 2:
val = max(3, schroedingerCat.GetNumPaws())
这表明程序逻辑存在严重差异,因为这可能会意外返回一个小于 3 的数字——这是用户意想不到的。
示例 3:
val = max(x, y++)
可能会将 y
递增不止一次。
使用内联函数,这些都不会发生。
主要原因是宏概念针对实现的透明性(文本代码替换),而内联针对适当的语言概念,使调用语义对用户更加透明。
关于c - inline和#define在实践中有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3554527/