gpt4 book ai didi

c - 标签作为 clang 中的值

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:36 25 4
gpt4 key购买 nike

我正在尝试在 Visual Studio 2015 中使用 clang 3.7 在 c 程序中实现“标签作为值”(https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html)。

作为玩具示例,我有以下导致编译器崩溃的代码(内部错误“ fatal error C1001:编译器中发生内部错误。1>(编译器文件'c:\agent\build\cache\git\vctools\vctools\compiler\utc\src\p2\main.c',第246行)1> 要解决此问题,请尝试简化或更改上面列出的位置附近的程序。")。

const void *array_jump[] = {&&S1,&&S2,&&S3,&&S3,&&S4};  

S1:
goto *array_jump[3];
S2:
return 2;
S3:
return 3;
S4:
return 4;

如果我将数组声明移动到它起作用的所有标签之后,直到我在任何语句中包含 array_jump 变量。

S1:
//comment out and add "return 1;" and it will compile fine
goto *array_jump[3];
S2:
return 2;
S3:
return 3;
S4:
return 4;

const void *array_jump[] = {&&S1,&&S2,&&S3,&&S3,&&S4};

任何人都可以提供一个像上面那样可行的例子吗?这是 clang 的问题还是 Visual Studio 的“代码生成”方面的问题?

我认为这个错误是相关的,但我不确定: https://connect.microsoft.com/VisualStudio/feedback/details/2103400/crash-in-clang-c2-with-address-of-label-extension

最佳答案

您构建的示例应该可以工作,我刚刚使用 Apple LLVM version 7.0.2 (clang-700.1.81) 对其进行了验证。

提到的错误报告似乎报告了同样的问题,在它被修复之前,除了尝试不使用扩展之外,你不能做任何事情。

虽然 GNU C 有一些很棒的扩展,但如果您想编写可移植的 代码,尽量避免使用任何 GNU C 扩展。

关于c - 标签作为 clang 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36983970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com