在这里回答问题时,我举了以下例子:
#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]);
}
}
在版本13之前的GCC以及所有版本的clang上,这将提供预期的输出(x86小端):
-248.750000
00 C0 78 C3
然而,当使用GCC 13.1编译时,我得到的输出是无稽之谈:
-248.750000
00 00 00 00
进一步的判断表明,罪魁祸首是选项-std=c2x
.如果我删除它,程序将按预期运行.
使用的编译器选项:-std=c2x -pedantic-errors -Wall -Wextra -O3 -lm
.https://godbolt.org/z/4qbo74eEW个
这是GCC身上已知的漏洞吗?