首页 > 解决方案 > 我在 C 中的宏做错了什么?

问题描述

#include <stdio.h>
#include <stdlib.h>

#define MAXIMUM(a,b) (a>b ? a:b)
#define MAX(a,b,c) (MAXIMUM(MAXIMUM(a,b),c))
#define MINIMUM(a,b) (a<b ? a:b)
#define MIN (a,b,c) (MINIMUM(MINIMUM(a,b),c))
#define MID(a,b,c) (MAX(a,b,c)+ MIN(a,b,c))/2


int main()
{
    int a=0; int b=0; int c=0;
    scanf("%d",&a);
    scanf("%d",&b);
    scanf("%d",&c);
    float t = MID(a,b,c);
    printf("%f\n",t);
    return 0;
}

我得到的错误是

left operand of comma has no operator in #define MID(a,b,c)
The expression cannot be used as a function in #define MIN

标签: c

解决方案


哦!我知道你的问题是什么:

#define MIN (a,b,c) (MINIMUM(MINIMUM(a,b),c))

应该

#define MIN(a,b,c) (MINIMUM(MINIMUM(a,b),c))

预处理器对空格敏感;MIN令牌和它的参数列表之间不能有任何空格(a,b,c)


推荐阅读