理解用作函数的宏

时间:2016-05-20 17:07:30

标签: c++ c-preprocessor

在这个片段中,我无法理解. . . checking whether to use expat... auto checking for libexpat... (cached) no configure: WARNING: expat is missing or unusable; some features may be unavailable. . . . 应该做什么。

FUNCTION(func,pred)

我也无法理解:

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

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

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;
}

......等等..

答案 1 :(得分:1)

FUNCTION定义名为func的函数。例如:

FUNCTION(minimum, <)

会定义一个类似的函数:

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

宏是一种代码生成方法。这段代码的作者显然觉得写这个2行函数太麻烦了,而是把每个人都搞糊涂了。

这绝对是宏损害(可读性)而非帮助的情况。我不建议为这些基本功能这样做。