我试图在gcc上用-pedantic-errors -pedantic -Wall -O2
编译以下内容。
#include <iostream>
void reset_uint32(uint32_t* pi)
{
char* c = (char*)(pi);
uint16_t* j = (uint16_t*)(c); // warning?
j[0] = 0;
j[1] = 0;
}
void foo()
{
uint32_t i = 1234;
reset_uint32(&i);
}
int main() {
foo();
}
但我没有看到任何严格别名警告。 我也尝试启用。
-fstrict-aliasing
-Wstrict-aliasing
但仍然没有警告。这是一个错误吗?
*pi = 0
? - Pubbychar*
进行别名访问,但不允许通过该char*
类型进行 '重新别名化' 到另一种类型。但就我所知,这可能会导致警告被禁用,无论是有意还是无意地。 - Michael Burrchar *
转换。但是,别名规则既不允许也不禁止任何指针转换。 - curiousguy