-Wstrict-aliasing = 3抛出警告,其中-Wstrict-aliasing = 1没有

时间:2018-06-13 14:13:37

标签: c gcc gcc-warning

使用GCC 5.4.0。

这个例子很简单。代码有两次违反了严格的别名规则。

  

“取消引用类型惩罚指针将破坏严格别名规则”

#include <stdint.h>
#include <inttypes.h>

int main() {
    uint8_t buffer[100]; // line 1
    uint32_t test = *((uint32_t*)(&buffer[10]));  // line 2
    uint32_t* pTest2 = (uint32_t*)(&buffer[10]);  // line 3
    test = *pTest2;  // line 4
}
  • -Wstrict-aliasing = 3仅警告第2行
  • -Wstrict-aliasing = 2警告第2行和第3行
  • -Wstrict-aliasing = 1 完全没有警告

来自GCC documentation

  

等级1:最具攻击性,快速,最不准确。当更高级别没有警告但-fstrict-aliasing仍然会破坏代码时可能很有用,因为它几乎没有错误的否定。但是,它有许多误报。 警告可能不兼容的类型之间的所有指针转换,即使从未解除引用。仅在前端运行。

现在我不确定-Wstrict-aliasing = 1实际上是多么可靠。这是GCC 5.4.0的问题吗?

0 个答案:

没有答案