mun*_*ent 4 c compiler-construction interpreter
我正在编写一个字节码解释器,它可以使用计算的 goto 或switch主指令调度循环的正常值。关键位包含在几个宏中,这些宏可以定义为使用或不使用计算的 goto。
我想根据编译器是否支持计算 goto 来决定默认使用哪种模式。有谁知道如何确定?据我所知,它们适用于 GCC 和 Clang,但我不想只硬编码几个随机编译器名称。
如果您使用autoconf等工具,以下功能测试对我很有用:
AC_MSG_CHECKING([if ${CC-gcc} supports computed gotos])
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[],
[[
void *my_label_ptr = &&my_label; /* GCC syntax */
goto *my_label_ptr;
return 1;
my_label:
return 0;
]])],
[AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_COMPUTED_GOTOS, 1,
[Define to 1 if the compiler supports computed gotos])],
[AC_MSG_RESULT(no)])
Run Code Online (Sandbox Code Playgroud)
HAVE_COMPUTED_GOTOS如果编译器支持 GCC 语法,它将定义宏。