我正在尝试在C中创建基于宏的跳转表。
这里是一些示例代码:
#include "stdio.h"
#define GOTO(X) static void* caseArg[] = {&&I0, &&R0, &&S0, &&F0, &&G0, &&H0}; \
goto *caseArg[X];
#define FINISH() goto caseEnd;
int main(int argc, char** argv) {
GOTO(1);
I0: printf("in I0\n"); FINISH();
R0: printf("in R0\n"); FINISH();
S0: printf("in R0\n"); FINISH();
F0: printf("in R0\n"); FINISH();
G0: printf("in R0\n"); FINISH();
H0: printf("in R0\n"); FINISH();
caseEnd:;
}
可能的标签(I0,R0等)必须相同。
问题是:我希望能够在同一源文件的不同作用域部分中使用同一宏。但是,编译器抱怨标签已定义。
有什么想法吗?任何可能的解决方法?