我正在尝试编写简单的宏,它给出了最大数量但是我得错误了 找出原因
#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'不是函数
答案 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 这解释了像你这样的类似例子。