Lun*_*din 7 c gcc compiler-bug pointer-conversion c23
在这里回答问题时,我做了以下例子:
#include <stdio.h>
#include <math.h>
int main (void)
{
float_t a = -248.75;
printf("%f\n", a);
unsigned char* ptr = (unsigned char*)&a;
for(size_t i=0; i<sizeof(a); i++)
{
printf("%.2X ", ptr[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
在版本 13 之前的 gcc 以及 clang 的所有版本上,这给出了预期的输出(x86 小端):
-248.750000
00 C0 78 C3
Run Code Online (Sandbox Code Playgroud)
然而,当使用 gcc 13.1 编译时,我得到无意义的输出:
-248.750000
00 00 00 00
Run Code Online (Sandbox Code Playgroud)
进一步检查发现,罪魁祸首就是这个选项-std=c2x。如果我删除它,程序将按预期运行。
使用的编译器选项:-std=c2x -pedantic-errors -Wall -Wextra -O3 -lm. https://godbolt.org/z/4qbo74eEW
这是 gcc 中的已知错误吗?