pclint的编译错误解决的方法

软件和网站开发以及相关技术探讨
回复
jili_baoer
帖子: 11
注册时间: 2007-08-04 10:04

pclint的编译错误解决的方法

#1

帖子 jili_baoer » 2007-08-04 10:19

我现在用pclint进行测试,可是有好多错误不知道怎么去解决呢!!!希望有高手帮帮忙呢!!!
如:error 40: (Error -- Undeclared identifier 'default_value') [MISRA Rule 20]
antonym55
帖子: 353
注册时间: 2007-04-03 9:52
联系:

Re: pclint的编译错误解决的方法

#2

帖子 antonym55 » 2007-08-04 12:12

jili_baoer 写了:我现在用pclint进行测试,可是有好多错误不知道怎么去解决呢!!!希望有高手帮帮忙呢!!!
如:error 40: (Error -- Undeclared identifier 'default_value') [MISRA Rule 20]
字面意思是 default_value 没定义, 如果没定义就定义一下,

如果已经定义了,可能是pc-lint 找不到相关路径,

可以考虑在std.lnt 中加入Project 的路径,

也可能是其它原因,具体情况就要看代码和pc-lint的设置了

msg.txt 和 pc-lint.pdf 中有说明 error 40 是什么东西,

MM居然用的MISRA 的规范,可见系统的要求还是比较苛刻的,

MISRA Rule 20
All object and function identifiers shall be declared before use.
jili_baoer
帖子: 11
注册时间: 2007-08-04 10:04

天头疼呢!!!!!!!!!!!!

#3

帖子 jili_baoer » 2007-08-07 10:17

我将宏定义所在的头文件的目录已经添加到std.lnt文件中了,可是呢,他在检查时还是不会自动地到所办函的头文件里去找。。。呜呜。。。
我只有在std.lnt里定义那些宏才行。。
我想如何将系统的要求变低一点呢!!!
jili_baoer
帖子: 11
注册时间: 2007-08-04 10:04

高手求助

#4

帖子 jili_baoer » 2007-08-07 10:22

antonym55
你知不知道怎么讲系统的要求将低一点,不用MISRA 的规范。
我现在做测试,一个工程测下来5千多个信息。。我头头让我将错误解决。
程序原本用vc编译已经通过,现在让我用pclint测试,我们这谁也不懂这,可怜的我有问题还问不了,,只有到网上来请高手帮忙了。。。。
antonym55
帖子: 353
注册时间: 2007-04-03 9:52
联系:

Re: 高手求助

#5

帖子 antonym55 » 2007-08-07 20:52

jili_baoer 写了:antonym55
你知不知道怎么讲系统的要求将低一点,不用MISRA 的规范。
我现在做测试,一个工程测下来5千多个信息。。我头头让我将错误解决。
程序原本用vc编译已经通过,现在让我用pclint测试,我们这谁也不懂这,可怜的我有问题还问不了,,只有到网上来请高手帮忙了。。。。
你在std.lnt中把 au-misra.lnt 注释了就OK了,

不过这不是解决问题的方法,最好还是改代码,

用什么标准,你们的系统没有要求么?

如果你们的系统可靠性要求比较高(例如 99.99999......% ),去掉这个就不是明智之举,

如果有一些确认可以匆略的的警告,可以在 option.lnt 中禁止掉

例如:warning 783, gcc 等编译器,要求c/c++文件必须以空行结束,

如果你不是用的这类编译器,公司或项目决定可以匆略这个警告,可以在option.lnt 中加入

-e783 //Line does not end with new-line

否则,你就必須在每个文件的结束加上空行,以保证不出现 783 的警告
antonym55
帖子: 353
注册时间: 2007-04-03 9:52
联系:

#6

帖子 antonym55 » 2007-08-07 21:16

补充一点MIRSA 标准的资料(它的主要文档是需要付费的)
MISRA C检查器:用于高安全性要求的系统
在对任务或安全性要求较高的系统中,代码的质量是极为重要的。由于IAR Embedded Workbench在链接过程中进行类型检查和多种诊断,因此生成的代码非常可靠。随着MISRA C检查器的引入,汽车工业方面的软件安全性要求也已得到支持。
什么是MISRA C?
汽车工业软件可靠性协会(MISRA)是英国的一个旨在提高汽车软件安全性的组织。

1998年,MISRA出版了“Guidelines for the Use of the C Language in Vehicle Based Software”。这些规则指出了C语言中的模棱两可之处,并为汽车工业建立了代码编写规则。

MISRA C包含127条规则。其中93条是必须遵守的,剩下34条是建议遵守的。所有这些规则都是应用于源代码,而不是由编译器产生的目标代码。
谁应当使用MISRA C?
遵守MISRA C规则是许多汽车公司的要求,但任何开发组织都可以从中获益。这些规则强调软件编程的实践,并指出了C语言中的模棱两可之处;有助于开发者以一致的风格来编写代码,避免混乱的设计。

它是如何工作的?
MISRA C检查器完全与IAR的C编译器集成在一起。在IAR Embedded Workbench中,您可以控制哪些MISRA C规则需要被检查;这些设置将被编译器和链接器所应用。
每当发现代码不符合某条必须的或建议的规则,编译器都会产生一条信息,除非您关闭该项检查。每条信息都注明了所违反的MISRA C规则,例如:

Error[Pm088]: pointer arithmetic should not be used (MISRA C rule 101)
遵从MISRA C
若要宣称您的产品遵从MISRA C规则,您必须证明:

• 完成一个兼容性矩阵,说明每条规则是如何得以实施的。

• 该产品中所有的C代码都遵从MISRA C规则;文档中如有指明可以不符合的除外。

• 维护一份清单,列出所有未遵从MISRA C规则的场合,并对每个不符合规则的场合都在已签署的文档中进行准确的纪录。

• 如“Guidelines for the Use of the C Language in Vehicle Based Software”一文中要求的那样,在培训、编程风格指导、编译器选择和验证、检查工具验证、度量尺度和测试覆盖率等方面都已采取适当的措施。
jili_baoer
帖子: 11
注册时间: 2007-08-04 10:04

谢谢呢!!!继续苦恼着!!

#7

帖子 jili_baoer » 2007-08-08 8:51

antonym55
我对测试结果研究了一下,发现有好多错误是由于他不去查找头文件而造成。
例如它报错为:error 1080: (Error -- Definition for class 'struct MENU_STRING' is not in scope)
但是struct MENU_STRING在include的头文件包含的一个头文件中已经定义。头文件的目录已经添加在std.lnt文件中,还是没用。不知是否是我的配置出了问题。。。。。。
回复