免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12298 | 回复: 11
打印 上一主题 下一主题

今天试了一下用pclint,有两个问题搞不明白 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-14 22:58 |只看该作者 |倒序浏览
1 在程序里面定义了#define for if (0) {} else for,用pclint检查时总是报
“error 774: (Info -- Boolean within 'if' always evaluates to False”
怎么屏蔽这个错误(想过/*lint -e774*/,但是又怕其它代码出现这种错误)

2 调用assert(memcmp(array_sort, array, array_size) == 0);时,会提示
error 1776: (Info -- Converting a string literal to void * is not const safe (arg. no. 1))
同样,怕其它代码错误不敢屏蔽此类型所有错误,不知怎么单独处理


不知各位使用时有没有碰过这种问题,怎么解决好呢?

论坛徽章:
0
2 [报告]
发表于 2009-03-14 23:00 |只看该作者
写得代码基本上没有用pclint以及类似的东西检查过

论坛徽章:
3
天蝎座
日期:2014-10-25 13:44:312015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:31
3 [报告]
发表于 2009-03-15 10:24 |只看该作者
在#define的末尾加 \\lint  !e774 不知道行不行,(不是在option文件里)

可能不行,

那试试看在使用该宏的每个地方地方都加一个。

2 调用assert(memcmp(array_sort, array, array_size) == 0);时,会提示
修改为assert(memcmp((VOID *)array_sort, array, array_size) == 0);呢?

论坛徽章:
0
4 [报告]
发表于 2009-03-15 13:22 |只看该作者
加了注释还是不行 估计是宏展开时不会把注释也展开

不可能在程序里面每行都加上忽略的,因为for实在用得太多了,并且每个for都加这些注释对代码阅读不利

assert也一样,用了很多,显式转换成void*也不行,主要是assert这个宏展示时会出现 (void *) "memset ..."这样的类型

论坛徽章:
0
5 [报告]
发表于 2009-03-15 14:03 |只看该作者
还是pclint的问题

我看网上说这个工具能检查内存泄漏,但我试了一下,默认的配置似乎不行

int init()
{
g_pstring = new char[LEN];
}

init();init();init();

很明显看出这里面有内存泄露,但是用lint检查不出,不知要怎么配置才行呢?

论坛徽章:
0
6 [报告]
发表于 2009-03-15 17:36 |只看该作者

回复 #3 ilex 的帖子

发现在宏前面写才有效,第一个问题解决了

#define for /*lint -e(777, 506, 774)*/if(0) {} else for

论坛徽章:
3
天蝎座
日期:2014-10-25 13:44:312015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:31
7 [报告]
发表于 2009-03-15 21:55 |只看该作者
原帖由 皇家救星 于 2009-3-15 17:36 发表
发现在宏前面写才有效,第一个问题解决了

#define for /*lint -e(777, 506, 774)*/if(0) {} else for



说点题外话,
既然用到了PC-LINT了,肯定不是自己玩的代码了,却又怎么把for给define一遍啊?主要本人太菜,没看到这样#define的优势在哪里。

论坛徽章:
0
8 [报告]
发表于 2009-03-15 22:04 |只看该作者
pc-lint手册中讲道,
-e ( #[,#]...) will inhibit message numbers # for the entire express before or within which it is placed. For example :

a = /*lint -e(413) */ *(int *) 0 + *(char *) 0;

这想这个能够解决你的第二个问题

论坛徽章:
0
9 [报告]
发表于 2009-03-15 23:50 |只看该作者

回复 #7 ilex 的帖子

因为vc 6.0的for不符合标准 
在for循环里面定义的变量并不只在循环内部可见,即使在循环外部也是可见的
所以要重定义以适应标准

论坛徽章:
0
10 [报告]
发表于 2009-03-15 23:55 |只看该作者

回复 #8 我learnc 的帖子

意思是要在assert宏里面加上这忽略这个错误的参数?

但assert宏不是我定义的,是标准库里面的,修改它修改不是很合适

有其它方法吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP