如何在 C 中使用宏创建表达式?

How do I create an expression using macros in C?

我需要一个接受输入的宏

MACRO(x, y, z, ...)

并扩展到

arr[0] == x && arr[1] == y && arr[2] == z ...

有什么想法吗?

arr 是 char[],宏参数是单个字符

这个怎么样:

#define MAKE_MACRO(arrname,x,y,z) (arrname)[0] == x && (arrname)[1] == y && (arrname)[2] == z
#define MACRO(arrname,x,y,z) MAKE_MACRO(arrname,x,y,z)
int main()
{
    char arr[3] = {'a','b','c'};
    
    if (MACRO(arr,'a','b','c'))
        printf("TRUE");
    else
        printf("FALSE");
        
    return 0;
}

有用的参考资料:

使用升压预处理器:

#include <boost/preprocessor.hpp>

#define MACRO_AND(Z, N_, ARGS_)  \
    BOOST_PP_EXPR_IF(N_, &&) \
    arr[N_] == BOOST_PP_TUPLE_ELEM(N_, ARGS_)

#define MACRO(...) \
    BOOST_PP_REPEAT( \
        BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), \
        MACRO_AND, \
        (__VA_ARGS__))

这使用 BOOST_PP_REPEAT 迭代可变参数,通过数据参数将它们作为元组提供。 BOOST_PP_EXPR_IF 为除第 0 个参数之外的所有参数添加 && 前缀。

Boost 预处理器是一个只有头文件的库,可以与 C 一起使用。

演示(在 coliru 上)here

仅供参考,非常小心...我不确定您将如何将其用于通用字符串输入(例如,如果在比较过程中出现 NUL 终止符)。