首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >g++ 4.7严格别名检查无效

g++ 4.7严格别名检查无效
EN

Stack Overflow用户
提问于 2013-02-08 00:38:33
回答 1查看 169关注 0票数 4

当我用g++ 4.7编译以下代码时。

代码语言:javascript
复制
g++ -Wall -fstrict-aliasing 

我会在第一个演员的时候得到警告:

warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]

第二个演员在没有任何警告的情况下是好的。有没有人能帮我理解为什么在第一次施法时会出现警告?

代码语言:javascript
复制
int main()
{
    char a [16];
    char * p = &a[0];

    //int i = *((int *)(&a[0])); //bad
    int j = *((int *)(p));  //ok
    return  0;
}
EN

回答 1

Stack Overflow用户

发布于 2013-02-08 01:22:37

第二次强制转换在没有任何警告的情况下没有问题。有没有人能帮我理解为什么在第一次施法时会出现警告?

这不是你应该问的问题。你应该问的问题是,为什么第二个角色没有显示警告,尽管它和第一个角色一样有问题。

不会对(int *) p发出警告,因为根据其类型,可以通过将指向整型的指针转换为char *来合法获取p。但是,除非是这种情况,否则仍然不允许取消对结果的引用。即使你没有得到任何警告。

请注意,该警告与可能“破坏”您的代码的优化无关。您的代码可能会收到警告,并按预期工作。您的代码无法获得警告,因此失败。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14756234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档