理解用作函数的宏
Understanding macros used as functions
在这段代码中,我无法理解 FUNCTION(func,pred)
应该做什么。
#define FUNCTION(func,pred)\
void func(int& a, int x){ \
if(!(a pred x)) a = x; \
}
这个我也看不懂:
FUNCTION(minimum, <)
FUNCTION(maximum, >)
有人可以解释一下吗?
preprocessor 将所有标记:FUNCTION(func,pred)
替换为
void func(int& a, int x){
if(!(a pred x)) a = x;
}
因此,用二元运算符定义一个函数func
为pred
。所以,当你这样写的时候:
FUNCTION(minimum,<)
预处理器 replaces 具有:
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行函数太费力了,反而用宏来混淆大家。
这绝对是宏有害(可读性)而不是帮助的情况。对于这样的基本功能,我不建议这样做。
在这段代码中,我无法理解 FUNCTION(func,pred)
应该做什么。
#define FUNCTION(func,pred)\
void func(int& a, int x){ \
if(!(a pred x)) a = x; \
}
这个我也看不懂:
FUNCTION(minimum, <)
FUNCTION(maximum, >)
有人可以解释一下吗?
preprocessor 将所有标记:FUNCTION(func,pred)
替换为
void func(int& a, int x){
if(!(a pred x)) a = x;
}
因此,用二元运算符定义一个函数func
为pred
。所以,当你这样写的时候:
FUNCTION(minimum,<)
预处理器 replaces 具有:
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行函数太费力了,反而用宏来混淆大家。
这绝对是宏有害(可读性)而不是帮助的情况。对于这样的基本功能,我不建议这样做。