百科问答小站 logo
百科问答小站 font logo



GCC 4 编译警告:warning: dereferencing type-punned pointer will break strict-aliasing rules 有什么比较好的解决办法? 第1页

  

user avatar   zhang-hao-72 网友的相关建议: 
      

挖个坟。。。我也是在类似*(unsigned long*)msg == KEY_XX这样的场合碰到这个warning了。

KEY_XX本身是个宏,所以没法用memcmp(msg, &KEY_XX, sizeof(KEY_XX)) == 0来解决。

最后笨办法解决了,似乎比用union简洁一点。

       unsigned long key; memcpy(&key, msg, sizeof(key)); if(key == KEY_XX) ...     

以及,如果msg首地址不是按4对齐,在某些不支持非对齐访问的cpu上(比如STM32F0)会出错。这个办法可以避免。




  

相关话题

  你见过哪些神一样的优化操作? 
  程序员的价值会随工作经验增多而增长么? 
  请问各位程序员,是我的思维方式有错误吗? 
  Python 中有什么不容易让人察觉的有趣的事实? 
  为什么操作系统没有前端和后端,而计算机很多其他领域却分前后端? 
  为什么那么多公司不用 .NET,而选择 PHP、JSP,是 .NET 有什么缺点吗? 
  在一段高速公路上,30分钟之内见到汽车经过的概率是95%,那么,在10分钟内见到汽车经过的概率是多少? 
  为什么使用C#开发软件的公司和程序员都很少? 
  C++ 学到什么程度才能叫精通? 
  作为一个程序员,平均两三年跳一次槽好还是持续在一家公司好? 

前一个讨论
总共欠七十万元网贷,向家里人坦白了,家人让我去死,我该怎么办?
下一个讨论
发光二极管多大的电流可以亮?





© 2025-04-22 - tinynew.org. All Rights Reserved.
© 2025-04-22 - tinynew.org. 保留所有权利