我试图理解像宏这样的函数的概念,但是有几点让我感到困惑。例如说我们有:
#define Max(a,b) ((a)>(b)) ? (a):(b))
我是这样调用它的
int i = Max(4,5);
这将计算等同于 a>b
的条件表达式?如果是则a,否则b。但是我对 Max 函数如何知道如何处理参数感到困惑。与实际函数不同,实现不是用调用程序中的代码编写的。 define 语句右侧的语句是否为我执行此操作?这对我来说只是一个新事物,我想确保我了解这里发生的事情。
像宏这样的函数的这个特殊部分让我很困惑。我知道这些类型的宏对于降低开销成本很有用,因为它们排除了节省堆栈内存的 JSR RTS 处理器指令。
最佳答案
#define Max(a,b) ((a)>(b)) ? (a):(b))
是一个宏,除了在您的代码中进行简单的文本替换外,它什么都不做,这意味着在预处理过程中,这一行:
int i = Max(4,5);
变为:
int i = ((4)>(5)) ? (4):(5));
请注意,在使用像这样的宏时没有类型安全,并且在调试代码时您也会非常困难。好的经验法则是:如果可以用函数实现同样的效果,就不要使用宏:
int max(int a, int b) {
return (a > b) ? a : b;
}
关于c - 函数类似于 C 中的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575485/