硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2346|回复: 9
收起左侧

[IAR] 请教C-Stat选中哪条规则能检查出If条件里用了赋值?

[复制链接]

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
发表于 2020-7-21 23:14:33 | 显示全部楼层 |阅读模式
多人协作的项目,最近Debug半天定位问题,发现有人在if()条件判断误用了赋值,造成255分之1的概率出错。
希望通过静态规则检查出来,请教?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2020-7-22 08:11:42 | 显示全部楼层
判断if(xxxx = 1)这类错误吗
回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
 楼主| 发表于 2020-7-22 09:21:17 | 显示全部楼层
eric2013 发表于 2020-7-22 08:11
判断if(xxxx = 1)这类错误吗

是的。CheckSum误用了赋值,只要它不为零就判True,很隐蔽。
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2020-7-22 09:22:43 | 显示全部楼层
我发现都是编译器自带的啊?? mdk,qt都会出现警告信息。
回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
 楼主| 发表于 2020-7-22 09:48:20 | 显示全部楼层
caicaptain2 发表于 2020-7-22 09:22
我发现都是编译器自带的啊?? mdk,qt都会出现警告信息。

不止一个条件的那种,试了下多条件的GCC也没报警告
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2020-7-22 10:34:23 | 显示全部楼层
emwin 发表于 2020-7-22 09:48
不止一个条件的那种,试了下多条件的GCC也没报警告

有没有几个简单的函数语句,我在Embedded Studio上试试,他也有静态检测机制。
回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
 楼主| 发表于 2020-7-22 15:16:07 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<stdint.h>

  3. short checksum = 0x55AA;

  4. int main(void)
  5. {
  6.     uint8_t *byte = (uint8_t *)&checksum;
  7.     if((byte[1] == 0x55) && (byte[0]  = 0x55))
  8.     {
  9.         puts("Check sum passed.");
  10.     }
  11.     if(byte[0]  = 0x55) {
  12.         puts("Hello World!");
  13.     }
  14.     return 0;
  15. }
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2020-7-22 16:37:28 | 显示全部楼层

使用Embedded Studio测试了,直接编译不会有任何错误提示。

但运行代码分析,会提示这个问题
QQ截图20200722163611.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2020-7-22 16:39:30 | 显示全部楼层

同样的代码,使用MDK AC6,只能检测到一个

2.jpg

而是MDK AC5,两个都可以检测到

QQ截图20200722164049.jpg

回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
 楼主| 发表于 2020-7-22 22:28:51 | 显示全部楼层
eric2013 发表于 2020-7-22 16:39
同样的代码,使用MDK AC6,只能检测到一个

,最新的编译器是又快又好啊
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 21:04 , Processed in 0.262391 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表