使用C中的预处理器检查三个变量的最大值

使用C中的预处理器检查三个变量的最大值,c,if-statement,c-preprocessor,C,If Statement,C Preprocessor,我想打印变量的值,它的值最高。我想通过使用预处理器来实现这一点,但我不知道如何实现。使用if-else很容易做到这一点,但是如何使用预处理器呢? 这是我的密码 #include <stdio.h> #define MAX(a,b,c) #if a > (b && c) # define a #endif #if b > (a && c) # define b #else # define c #endif int main (

我想打印变量的值,它的值最高。我想通过使用预处理器来实现这一点,但我不知道如何实现。使用if-else很容易做到这一点,但是如何使用预处理器呢? 这是我的密码

#include <stdio.h>
#define MAX(a,b,c)
#if a > (b && c)
#   define a
#endif
#if b > (a && c)
#   define b
#else
#   define c
#endif

int main (void)
{
    int wynik;
    int a = 6;
    int b = 13;
    int c = 9;
    wynik = MAX(a,b,c);
    printf("%i", wynik);

    return 0;
}

这不是它的工作原理。你的三个宏的最大值应该是


#define MAX(a,b,c)((a)您不能通过预处理器条件检查运行时变量的值。它们只能检查预处理器级别符号的值。例如

#define A 5

#if (A  > 3)
...
#endif
看看您使用的
#define
#if
我的猜测是,您的意思是定义某种预处理器级别的函数,它在Python中具有
#define
def func():
类似的角色。它不是这样工作的。

  • #定义一个expr
    编译之前,只需将当前源文件中的符号
    A
    替换为表达式
    expr
    。没有出现
    A
    ,没有替换
  • #define A(b,c)expr
    与前一个类似,但使用类似于函数参数的
    b,c
    ,并使用调用宏时传递的值在替换的in表达式
    expr
    中展开它们
  • \if expr
    \ifdef symbol
    \ifndef symbol
    是检查先前通过
    \define
    s(或通过编译器选项-D)定义的符号的值甚至简单定义的方法以便对整个代码段执行条件编译。这些部分用
    #endif
    关闭,如果出现错误条件,可使用
    #else
    #elif
    指令编译替代部分。
我怀疑这是您的实际目的,您可以做的是定义一个宏,在其参数中找到最大值:

#define MAX(a,b,c) \
    (((a>b) && (a>c))? a : ((b>a) && (b>c))? b : c ))
我使用三元运算符来计算最大值


注意:字符
\
允许在多行上放置宏。它必须是行的最后一个字符。

预处理器不能用于此操作。预处理器对c变量和sysntax一无所知

不能在#定义中使用任何预处理器条件表达式

如果要使用宏查找最多3个标记,则需要使用C表达式,因为它将在运行时(或编译时)进行计算,而不是在预处理期间

#define MAX(a,b,c)  (a) > (b) ? ((a) > (c) ? (a) : ((c) > (b) ? c : (b))) : ((b) > (c) ? (b) : (c))

这是什么?
a>(b&&c)
?你是说
a>b&&a>c
?@风向标,正如我解释的,我不知道。这只是OP在那些文章中使用的表达方式#ifs@it根据
b
c
的值(有时是其部分),检查a是否大于
1
0
考虑到它应该找到三个值中的最大值…@WeatherVane它不是答案
#define
需要一条“行”,并且不能包含其他类似这样的
#
风格的预处理器指令。宏的边际优势是它可以处理非
int
值。
#define MAX(a,b,c)  (a) > (b) ? ((a) > (c) ? (a) : ((c) > (b) ? c : (b))) : ((b) > (c) ? (b) : (c))