C和跳转表实现中的“本地”标签

问题描述 投票:1回答:1

我正在尝试在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等)必须相同。

问题是:我希望能够在同一源文件的不同作用域部分中使用同一宏。但是,编译器抱怨标签已定义。

有什么想法吗?任何可能的解决方法?

c macros goto dispatch jump-table
1个回答
0
投票

标签为值只能在使用gcc进行编译时使用,因为它是gcc扩展名。

所以它可以100%罚款。

https://godbolt.org/z/jQvssU

© www.soinside.com 2019 - 2024. All rights reserved.