了解用作函数的宏

Understanding macros used as functions

本文关键字:函数 了解      更新时间:2023-10-16

在这个片段中,我不明白FUNCTION(func,pred)应该做什么。

#define FUNCTION(func,pred)
void func(int& a, int x){  
if(!(a pred x)) a = x;     
}

我也无法理解这一点:

FUNCTION(minimum, <)
FUNCTION(maximum, >)

有人可以解释一下吗?

预处理器替换所有标记: FUNCTION(func,pred)

void func(int& a, int x){
if(!(a pred x)) a = x;
}

因此,定义一个函数func二元运算符作为pred。所以,当你写这个的时候:

FUNCTION(minimum,<)

预处理器将其替换为:

void minimum(int& a, int x){
   if(!(a < x))
    a = x;
}

同样的事情发生在:

FUNCTION(maximum,>)

生产:

void maximum(int& a, int x){
   if(!(a > x))
    a = x;
}

。等等..

FUNCTION正在定义一个名为 func 的函数。例如:

FUNCTION(minimum, <)

将定义一个这样的函数:

void minimum(int& a, int x) {
    if(!(a < x)) {
        a = x;
    }
}

宏是一种代码生成方法。这段代码的作者显然觉得写出这个 2 行函数太费力了,反而用宏混淆了大家。

这绝对是宏损害(可读性)而不是帮助的情况。我不建议对此类基本功能执行此操作。