zoukankan      html  css  js  c++  java
  • 类型强制转换符 与 + 符的优先级

    移植 gcc 代码到 VS2008 时,犯了一个关于类型强制转换符 与 + 符的优先级错误。

    共有的示例代码如下(也就是问题的条件):

    1 char cArrayTest[10];  
    2 unsigned short *pusTest = NULL;  
    3 unsigned short *pusTest2 = NULL;  
    4   
    5 for(int i = 0;i < 10;i++)  
    6 {  
    7     cArrayTest[i] = i + 1;  

    gcc 的原始代码如下示例:

    1 pusTest = cArrayTest;  
    2 pusTest2 = cArrayTest + 2;  

    C 编译器对下面的两句可以正常编译。
    VS2008 的编译器会报错,必须强制类型转换。

    当时也未多考虑,直接在前面增加了强制类型转换符,修改后的代码如下:

    1 pusTest = (unsigned short *)cArrayTest;  
    2 pusTest2 = (unsigned short *)cArrayTest + 2;  

    本来是 pusTest2 想取 cArrayTest 的第三和第四个字节来组成一个 unsigned short 的数值。
    但实际上上面的代码 pusTest2 取得的是 cArrayTest 的第 5 和第 6 个字节所组成的 unsigned short 的数值。
    由于 pusTest2 在后继的使用时比较隐蔽,代码又无法调试,所以导致出错问题后很久未发现问题的原因。

    最后才怀疑到此句:

    1 pusTest2 = (unsigned short *)cArrayTest + 2;  

    查了一下,强制类型转换或的优先级果然高于 + 符。

    1 pusTest2 = (unsigned short *)(cArrayTest + 2);   

    才是想要的结果。

  • 相关阅读:
    ONVIFclient搜索设备获取rtsp解决开发笔记(精华文章)
    openldap---ldapsearch使用
    简单工厂模式
    编译和运行时,库在何处
    Linux 双网卡绑定技术
    统计某个字符个数,小数运算,小数加减乘除
    2cifang.com_2次方学习
    c/c++ extern “C”
    环境变量0831
    股票技巧
  • 原文地址:https://www.cnblogs.com/91program/p/5206427.html
Copyright © 2011-2022 走看看