称为对象'x2'的宏错误不是函数

时间:2014-04-21 04:07:28

标签: c macros c-preprocessor

我正在尝试编写简单的宏,它给出了最大数量但是我得错误了 找出原因

#include <stdio.h>

#define MAX ((x1) ,(x2)) \
        ((x1) > (x2) ? (x1) : (x2)) 


int main () {

        int x1 = 10 ;
        int x2 =20 ;
        int j = MAX(x1 , x2) ;
        printf ("%d" , j) ;

}

调用对象'x2'不是函数

2 个答案:

答案 0 :(得分:3)

您当前的宏会生成如下所示的行:

int j = ((x1) ,(x2)) ((x1) > (x2) ? (x1) : (x2))(x1 , x2) ;

让我们通过这样编写来修复你的宏:

#define MAX(x1, x2) \
    ((x1) > (x2) ? (x1) : (x2)) 

这会产生一行代码如下:

int j = ((x1) > (x2) ? (x1) : (x2)) ;

答案 1 :(得分:1)

MAX((x1) ,(x2))之间使用空格是创建问题的原因。它会在遇到空格时将MAX替换为跟随它的任何内容。

Check this  这解释了像你这样的类似例子。