且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在C语言中编写通用的#define宏并编写更少的代码

更新时间:2022-10-31 09:27:32

您可以使用X-Macros的一种变体来实现:

You could do it with one variant of X-Macros:

#define IMPLEMENT(X) \
    X(P_A, 1, 5) \
    X(P_B, 2, 6) \
    X(P_C, 3, 7)

enum {
    // Just one
    #define X1_P(n, x, y) n = x,
    IMPLEMENT(X1_P)

    // Both
    #define X2_P(n, x, y) X_##n = x,
    #define Y2_P(n, x, y) Y_##n = y,
    IMPLEMENT(X2_P)
    IMPLEMENT(Y2_P)

    DUMMY // Just in case compiler is strict about trailing comma
};

将扩展为:

enum {
    P_A = 1, P_B = 2, P_C = 3,

    X_P_A = 1, X_P_B = 2, X_P_C = 3,
    Y_P_A = 5, Y_P_B = 6, Y_P_C = 7,

    DUMMY
};