代码之家  ›  专栏  ›  技术社区  ›  David Thornley

定义宏的宏[重复]

  •  1
  • David Thornley  · 技术社区  · 16 年前

    可能重复:
    C, Macro defining Macro

    有人知道怎么做吗?

    我有很多重复的宏,比如:

    #define MYMACRO1(x)         Do1(x)
    #define MYMACRO2(x,y)       Do2(x, y)
    #define MYNEXTMACRO1(x)     Do1(x)
    #define MYNEXTMACRO2(x,y)   Do2(x, y)
    

    上面的代码工作正常,但我想编写一个宏来创建宏(一个元宏)。

    例如:

    #define MYMETAMACRO(name) \
    #define #name1(x)     Do1(x) \
    #define #name2(x,y)   Do2(x, y) \
    

    这样我就能做到:

    MYMETAMACRO(MYMACRO);
    MYMETAMACRO(MYNEXTMACRO);
    

    然后:

    MYMACRO1(2);
    MYMACRO2(2,3);
    MYNEXTMACRO1(4);
    MYNEXTMACRO2(4, 5);
    

    预处理器在 #define 因为它认为它是宏的一个缺失参数。

    2 回复  |  直到 10 年前
        1
  •  2
  •   SigTerm    16 年前

    据我所知,你不能编写一个宏,可以在C/C++中编写另一个宏。

    我花了足够的时间在C中使用C预处理器来做类似的事情,问周围的人,并得出结论,这是不可能的。

        2
  •  1
  •   WhirlWind    16 年前

    不能在其他宏中定义宏,但可以从宏中调用宏,这样可以获得基本相同的结果。

    #define B(x) do {printf("%d", (x)) }while(0)
    #define A(x) B(x)
    

    所以, A(y) 扩展到 do {printf("%d", (y)) }while(0)