3969|2

57

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于MISRA:规则17.4 ,只允许用数组索引做指针运算 [复制链接]

规则17.4 只允许用数组索引做指针运算
按照如下方式定义数组和指针:
uint8_t a[10];
unit8_t *p;
p = a;
则*(p+5) = 0是不允许的,而p[5] = 0 则是允许的,尽管就这段程序而言,二者等价。

以下给出一段程序,读者可参照相应程序行的注释,细细品位上述规则的含义。

void my_fun(uint * _t * p1, uint8_t p2[])
{
    uint8_t index = 0;
    uint8_t *p3;
    uint8_t *p4;
    *p1 = 0;
    p1 ++;          /* 不允许, p1不是指向数组的指针 */
    p1 = p1 +5;     /* 不允许, p1不是指向数组的指针 */
    p1[5] = 0;      /* 不允许, p1不是指向数组的指针 */
    p3 = &p1[5];
    p2[0] = 0;
    index ++;
    index = index + 5;
    p2[index] = 0;    /*允许*/
    *(p2+index) = 0;  /* 不允许 */
    p4 = &p2[5];      /*允许*/
}

那如果是这样的话,是不是我就不能写像 memcpy(void* des, void * src, UINT32 len)这样的函数头,因为函数中一定会使用指针加减操作所指向的内存??
而是要写成memcpy(UINT8 des[], UINT8 src[], UINT32 len)    ???

最新回复

印象中,偶的编译器是支持的哈 为什么不允许? 郁闷 。。。。 好像几个平台都可以这么写的,为啥不行?  详情 回复 发表于 2008-12-6 16:46
点赞 关注

回复
举报

61

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这是什么破规则,倒塌!~~~还让不让人活了
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
印象中,偶的编译器是支持的哈

为什么不允许?

郁闷

。。。。

好像几个平台都可以这么写的,为啥不行?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表