让你提前认识软件开发(51):VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改

简介: 第3部分 软件研发工作总结VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改 【文章摘要】        Pclint是一种C/C++软件代码静态分析工具。

第3部分 软件研发工作总结

VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改

 

【文章摘要】

        Pclint是一种C/C++软件代码静态分析工具。它是一种更加严格的编译器,能够发现普通编译器所不能发现的代码中的很多问题,因此被广泛应用于软件开发项目中。

       本文介绍了如何在VC++集成开发环境中配置Linux下的Pclint工程,给出了C语言中pclint规则A检查的常见错误,并描述了对应的修改办法。

 

【关键词】

         VC++  Pclint  配置  操作  修改

 

1. 前言

        Pclint是一种强大的C/C++软件代码静态分析工具,它不但能够对程序进行全局分析、识别没有被适当检验的数组下标、报告未被初始化的变量、警告使用空指针连同冗余的代码,还能够有效地提出许多程序在空间利用、运行效率上的改进点。因此,许多大型的软件研发组织都把Pclint检查作为代码走查的第一道工序。

        Pclint的作用有如下几个:

        (1) Pclint是一种更加严格的编译器,不仅可以像普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。

        (2) Pclint不但可以检测单个文件,也可以从整个项目的角度来检测问题。

        (3) Pclint支持几乎所有流行的编辑环境和编译器。

        (4) Pclint还支持各种提高效率和防止错误的方法。

        Pclint虽然好处多多,但要运行起来还需要进行一定的配置,而这个配置过程比较的繁琐,稍不注意就会配错。

        本文根据作者的实际经验,介绍了VC++集成开发环境中LinuxPclint工程的配置方法。在配置之前,要确保已经获取了完整的Pclint软件,并存放到PC机上。

        此外,本文还介绍了用pclint工具对C代码进行检查的时候,规则A中的常见错误,并给出了对应的修改办法。

 

2. 配置前准备

2.1 获取Linuxincludelib目录

        为了完成LinuxPclint工程的配置,需要将Linux下的includelib目录存放在本地文件夹下。

        一般说来,这两个目录位于usr目录之下,在本地的存放情况如图1所示:

1 includelib的本地存放示意图

 

2.2 A规则和B规则lnt文件的配置

       Pclint对代码的检查分为A规则和B规则,其中A规则是必须要修改的,B规则中与平台无关的错误要尽量修改。A规则和B规则配置文件的示例如下:

       A规则:

au-sm.lnt au-ds.lnt au-misra.lnt co-gnu3.lnt lib-stl.lnt

options_A.lnt  -si4 -sp4

-i"D:/linux/usr/include"

-i"D:/linux/usr/lib/gcc-lib/i586-linux/3.3.3/include"

       B规则:

au-sm.lnt au-ds.lnt au-misra.lnt co-gnu3.lnt lib-stl.lnt

options_B.lnt  -si4 -sp4

-i"D:/linux/usr/include"

-i"D:/linux/usr/lib/gcc-lib/i586-linux/3.3.3/include"

 

        根据includelib目录存放位置的不同,只需在两个文件中作对应修改即可。

 

2.3 Pclint检查结果文件夹的创建

        为了方便保存Pclint的检查结果,需要在本地创建一个文件夹。当每次运行Pclint之后,会将结果存放在该文件夹之下。

        文件夹及产生的结果示例如图2所示:

2 Pclint检查结果存放文件夹示意图

 

3. VC++Pclint工程的配置方法

        在完成了上述准备工作之后,我们接下来要做的便是在VC++中配置Pclint工程了。

3.1 Pclint规则A的配置

        打开VC++软件,选择“Tools-->Customize”。如图3所示:

3 Pclint规则A的配置操作1

        单击“Customize”,选择“Tools”。如图4所示:

4 Pclint规则A的配置操作2

        在“Tools”菜单下,可以完成Pclint规则A的配置。配置示意图如图5所示:

5 Pclint规则A的配置操作3

        Pclint规则A的各项配置为:

名称:PC-lint A(project check)

Command: D:\pclint\LINT-NT.EXE

Arguments: +ffn -i"D:\pclint" pclint_A.lnt env-vc6.lnt  $(WkspName).lnt >>"D:\pclint_output\pclint_A.lnt"

Initial Directory: $(WkspDir)

        其中,名称可以根据个人习惯及实际需要进行选取,“Command”项是“LINT-NT.EXE”的全路径,“Arguments”中涉及到A规则的lnt文件和检查结果的存放路径(2.3)

        要注意的是,在图5中,如果不勾选“Use Output Window”项,那么检查的结果会直接出现在VC++工程的输出框中。为了保存检查结果,建议勾选该项(勾选后结果会保存在2.3节所建的文件夹下)

         配置完成之后,单击图5中右下角的“Close”,然后选择VC++菜单栏上的“Tools”项,会看到Pclint规则A检查项的名称,如图6所示:

6 Pclint规则A检查项示意图

 

3.2 Pclint规则B的配置

         对于Pclint规则B的配置,操作1和操作2与规则A完全相同,操作3的各项配置如图7所示:

7 Pclint规则B的配置操作3

         Pclint规则B的各项配置为:

名称:PC-lint B(project check)

Command: D:\pclint\LINT-NT.EXE

Arguments: +ffn -i"D:\pclint" pclint_B.lnt env-vc6.lnt  $(WkspName).lnt >>"D:\pclint_output\pclint_B.lnt"

Initial Directory: $(WkspDir)

         要注意勾选“Use Output Window”项,配置完成之后,单击图7中右下角的“Close”,然后选择VC++菜单栏上的“Tools”项,会看到Pclint规则B检查项的名称,如图8所示:

8 Pclint规则B检查项示意图

        经过以上配置之后,每次只要单击图6和图8Pclint规则A和规则B的名称,我们就可以用Pclint来检查代码了。

 

4. 常见的pclint规则A错误及修改办法

4.1 外部声明的函数无返回值

        错误提示:error 808: (Info -- No explicit type given symbol 'XXX', int assumed)

        表现形式:代码中,在定义XXX变量的时候没有定义其类型。

        修改办法:在XXX变量之前,添加其返回值类型。

 

4.2 传递给函数的整型值参数超出了范围

        错误提示:error 419: (Warning -- Apparent data overrun for function 'strcpy(char *, const char *)', argument 2 (size=17) exceeds argument 1 (size=16)

        表现形式:代码中,在数据移动的时候出现了数据溢出。

        修改办法:调整相关存储结构的长度,避免数据溢出。

        备注:主要指memcpystrcpyfgets等数据移动或转换函数中的参数之间有隐含语义关系的函数。

 

4.3 定义的局部变量在该函数中未使用

         错误提示:error 529: (Warning -- Symbol 'XXX' (line xxx) not subsequently referenced)

         表现形式:代码中,XXX变量(位于xxx)虽然定义了,但在后续语句中并没有用到。

         修改办法:直接将该变量注释掉。

        备注:该类错误在代码中比较常见。

 

4.4 布尔类型恒为真或恒为假

        错误提示:error 774: (Info -- Boolean within 'if' always evaluates to True

        表现形式:代码中,if语句恒为真。

        修改办法:不用if判断,直接执行内部的函数语句。

 

4.5 非负数类型的变量不可能小于0,而代码中做了小于0的判断

        错误提示:error 775: (Info -- non-negative quantity cannot be less than zero)

        表现形式:代码中,某变量值(如用strlen()赋值的变量)为非负数,但做了小于0的判断。

        修改办法:将“<=0”改为“==0”。

 

4.6 在关系表达式中,有符号数和无符号数混合使用

        错误提示:error 574: (Warning -- Signed-unsigned mix with relational)

        表现形式:代码中,两个进行比较的整型变量,一个为有符号型,另一个为无符号型。

        修改办法:在不影响功能和结果的情况下,修改其中一个变量的类型,让两变量的类型一致。

 

4.7 对局部变量赋值了,但没有任何地方访问到该变量

        错误提示:error 550: (Warning -- Symbol 'XXX' (line xxx) not accessed)

        表现形式:代码中,变量XXX已经被赋值,但并没有被使用到。

        修改办法:可直接将该变量注释掉。

 

4.8 函数没有声明,但在该函数的实现语句之前被其它函数调用了

        错误提示:error 1055: (Error -- Symbol 'XXX' undeclared, assumed to return int)

        表现形式:代码中,函数XXX没有在头文件(.h文件)或实现文件(.c文件)中声明,并且在该函数的实现语句之前,其它函数调用了它。

        修改办法:在头文件中声明该函数,或在实现文件的前面声明该函数。

 

5. 总结

       本文按照操作顺序介绍了如何在VC++集成开发环境中配置Linux下的Pclint工程,并详细介绍了用pclint工具对代码进行检查时,规则A所包含的常见错误以及修改办法,供大家参考。

      “工欲善其事,必先利其器”,Pclint工具能够发现编译器所不能发现的问题。如果我们能够合理地利用它,必将在一定程度上提高代码的质量。

        当然,“打铁还需自身硬”,要想写出高质量的代码,光靠工具是远远不够的。我们需要不断学习、不断提高自己编码的水平,并用心写好每一段代码。

 

 

 

(本人微博: http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)
目录
相关文章
|
2月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
78 3
|
11天前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
84 7
|
1月前
|
存储 测试技术 持续交付
Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用
本文探讨了Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用。首先介绍了CI/CD的基本概念,接着阐述了Docker在环境一致性、快速部署、资源隔离和轻量化方面的优势。文章还详细讨论了构建、测试和部署阶段的具体集成方法,以及集成后带来的效率提升、可靠性增强、加速交付和易于管理等好处。最后,通过案例分析展示了集成的实际效果,强调了Docker与CI/CD结合的重要性和未来前景。
49 2
|
2月前
|
监控 测试技术 持续交付
自动化和持续集成在软件开发中各自扮演什么角色
在软件开发中,自动化与持续集成(CI)相辅相成,共同提升开发效率和软件质量。自动化通过高效执行测试、构建和部署等重复任务,减少人为错误,确保流程一致性,并支持持续部署。CI则通过频繁集成代码变更、提供快速反馈、提高代码质量和促进团队协作,简化部署过程。两者结合,极大优化了软件开发流程。
|
2月前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
2月前
|
运维 Devops jenkins
DevOps实践:持续集成与持续部署在现代软件开发中的作用
【10月更文挑战第42天】在快节奏的软件开发世界里,DevOps已经成为一种提升效率、确保质量和加速交付的重要方法。本文将深入探讨DevOps的核心组成部分—持续集成(CI)和持续部署(CD)—并展示它们如何通过自动化流程优化开发周期。我们将从基础概念讲起,逐步过渡到实际操作,最终通过一个简单代码示例来演示这一过程。文章旨在为读者提供清晰的指导,帮助他们理解和实现CI/CD流程,从而在软件开发领域取得竞争优势。
|
2月前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
81 9
|
2月前
|
监控 测试技术 持续交付
自动化和持续集成在软件开发中各自扮演什么角色?
自动化和持续集成在软件开发中各自扮演什么角色?
|
2月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
68 5
|
2月前
|
监控 测试技术 持续交付
自动化和持续集成在软件开发中各自扮演什么角色?
自动化和持续集成在软件开发中各自扮演什么角色?