我正在使用预处理器指令在 C 中定义函数宏。我可以在函数宏中有多个 if/else if 语句吗?
如果是,我该怎么写?
#define WRITE(str,id) #str(id)
// HERES where I am having difficulty
#define DRAW_GENERIC_WINDOW(windowID, type) if type==1 WRITE(draw_text,windowID) else if type==2 WRITE(draw_image,windowID) else if type==3 WRITE(draw_hyperlink,windowID)
// usage
DRAW_GENERIC_WINDOW(112, 1);
DRAW_GENERIC_WINDOW(178, 2);
DRAW_GENERIC_WINDOW(988, 3);
// At compile time the above should be converted to...
draw_text(112);
draw_image(178);
draw_hyperlink(988);
我知道如何在函数宏中执行单个 if else 语句,但不知道如何使用多个 if/else if 执行此操作:
// if else eg
#define DRAW_GENERIC_WINDOW(windowID, type) ((type)==(1))?WRITE(draw_text,windowID):WRITE(draw_image,windowID)
注意:在你问“你为什么要这样编程?”之前 :P 这是因为我用一种与 C 非常相似的语言编写,称为 4dm,除了没有结构、指针或声明新数据类型的能力。所以我不得不求助于预处理器指令来实现某种形式的虚拟功能(当我不知道我正在使用的窗口类型 - 图像、超链接等时使用)。