eli*_*ego 10 c inline c-preprocessor
正如标题所说; inline关键字和#define预处理程序指令之间的区别是什么?
Pav*_*sky 42
#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一次以上.
使用内联函数,这些都不会发生.
主要原因是宏观概念针对实现的透明度(文本代码替换)和内联目标正确的语言概念,使得调用语义对用户更加透明.
| 归档时间: |
|
| 查看次数: |
10879 次 |
| 最近记录: |