下面这些例子说明FlexeLint/PC-lint的一些功能。通过修改这些代码样本,可以分析它们的原因和处理结果。

“Off-By-One”错误实例(C源码)

下面的例子说明了FlexeLint/PC-lint为什么会出现“Off-By-One”错误。

/* Off-By-One Example */
#include <stdio.h>
int main()
{
int i;
int a[] = {1,2,3};
int n = sizeof(a)/sizeof(int);
for(i=0;i<=n;i++)
printf("a[%d]=%d\n",i,a[i]);
return 0;
}

“Multi-pass”实例(C源码)

这个实例说明了FlexeLint/PC-lint's分析后的伪执行能力。注意使用嵌入的lint选项。

//lint -passes(4)int f( int n )
{
return 10/n;
}int g( int n )
{
if( n == -1 ) return 0;
return f(n) + g( n - 1 );
}int main()
{
return g( 3 );
}

基于规则的语法(C源码)

这个例子说明了FlexeLint/PC-lint是怎样进行语法检查的。

下面的例子演示了如何使用语义选项。

  • lint -sem( fill, 1p >= N ) :“fill” 的含义是指向一个长度至少为N的区域。

  • lint -sem( copy, @p == 1p ): “copy”的返回值指向一个大小(“copy“的第一个参数值)等于该区域的区域

注释:

  • "1p" 是一个区域的长度,由给定函数的第一个参数指定。

  • "@p" 是一个区域的长度,由给定函数的返回值指定。

#include <stdlib.h>
#include <string.h>
void fill( char * );
char *copy( char * ); #define N 100

基于规则的语法(C++源码)

这个例子说明了一个简单的C++程序是如何出现错误的。

#include <string.h>class X
{
int *p;
public:
X()
{ p = new int[20]; }
void init()
{ memset( p, 20, 'a' ); }
~X()
{ delete p; }
};

Strong typedef检查实例(C++源码)

这个例子说明了FlexeLint/PC-lint是怎样检查Strong typedef用法的。

Strong typedef,可以使FlexeLint可以在不匹配的情况下给报告分配标称。下面是函数combine()中的错误报告。之后的选项将赋予它们三个强大的stypedef名(之后会定义它们) ,并具有AcJcX的特性。它们的含义是报告分别在分配冲突给typedef时 (但不包括c-onstants),加入typedef时 (但不包括constants) 和从typedef中提取。

lint -strong( AcJcX, Length, H_Position, V_Position ) #define Max(x,y) ((x) >= (y) ? (x) : (y))
#define Min(x,y) ((x) >= (y) ? (y) : (x))

以下三种typedef


// types
typedef int Length;
typedef Length H_Position;
typedef Length V_Position; struct Point
{
H_Position x; // horizontal position
V_Position y; // vertical position
};struct Rectangle
{
Point ul; // upper left boundary
Point lr; // lower right boundary
};

下面的函数计算没有complaint。长度使用H_Position和V_Position的通用形式定义。

Length perimeter( const Rectangle &r )
{
Length len = 0;
len += 2 * (r.ul.y - r.lr.y); // combining V_Position with Length
len += 2 * (r.lr.x - r.ul.x); // combining H_Position with Length
return len;
}

下面的函数绘制了一些合理的complaints。在这个函数中,需要H_Position和V_Position两种类型。它们被视为不能合并的,单独不同的类型。当这种情况出现的时候,就会发出警告。
combine(r1,r2) :形成一个刚好覆盖r1和r2的大矩阵。

Rectangle combine( const Rectangle &r1, const Rectangle &r2 )
{
Rectangle r;r.ul.x = Min( r1.ul.x, r2.ul.x ); // OK
r.ul.y = Max( r1.ul.y, r2.ul.y ); // OK
r.lr.x = Max( r1.lr.y, r2.lr.x ); // Complain
r.lr.y = Min( r1.lr.x, r2.lr.x ); // Complain
return r;
}

引入多个模块

这个例子介绍了FlexeLint/PC-lint如何跨模块分析 。

当多个模块(即单独的编译单元)呈递给FlexeLint时,将被当做同一应用的部分来处理。FlexeLint的跨模块功能使它拥有编译人员不具备的透视功能。 然而,早期的版本中限制使用者只能同时编辑和提交一个文本。所以那时,编程人员没有办法在线测试多个模块。这就导致了很多人没有办法在多模块中写出有意义的报告。

一个.mm文件应该包含如下形式:
第一行评论
第二行评论
……
第N行评论
第一个模块名
……
最后一个模块名
第一个标题名
……
最后一个标题名

所有的'@'指令必须从第1列开始。注释行是可选的。 实际的C或C ++源代码可选择定义。没有必要把标题放在每个模块的后面。它们可以自由穿插。此外,空白行可以在整个文中中穿插。 模块可以有 .c 或 .cpp扩展或两者的混合。

如下例:

@module c1.cpp
#include "c.h"
int f()
{
return g(0) + 2;
}@module c2.cpp
#include "c.h"
int g( int *p )
{
return ++*p;
}@header c.h
int g( int * );

多模块的初始化和冗余

这个例子说明FlexeLint/PC-lint如何进行跨模块初始化顺序问题的检测。

本实例说明初始化中a.cpp的a变量和b.cpp的b变量的检测。还说明了对ab.h中未使用元素的检测。 随着时间的推移可以聚集不再使用的元素。注意区别对待stdio.h和 ab.h。 stdio.h在应用中有许多没有使用的声明,但这些没有被说明。ab.h中未被使用的声明会报告出来。

@module a.cpp
#include <stdio.h>
#include "ab.h"int a = f();
int main()
{
printf( "b is %d\n", b );
return 0;
}@module b.cpp#include "ab.h"int b = a;
int f()
{
return 3;
}@header ab.hextern int f(void);
extern int a;
extern int b;
typedef int INT32;
#define ReturnValue 3
struct A { int a, b; };

FlexeLint/PC-lint最新下载地址

PC-lint 的代码实例相关推荐

  1. html约束验证的例子,HTML5利用约束验证API来检查表单的输入数据的代码实例

    HTML5对于表单有着极大程度的优化,无论是语义,小部件,还是数据格式的验证.我猜你肯定会以浏览器兼容作为借口不愿意使用这些"新功能",但这绝不应该成为使你停滞不前的原因,况且还有 ...

  2. ul、li列表简单实用代码实例

    利用ul和li可以实现列表效果,下面就是一个简单的演示. 代码如下: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  3. html5的video标签实现对HLS(m3u8格式)的支持(附代码实例)

    html5的video标签实现对HLS(m3u8格式)的支持(附代码实例) <script src="https://cdn.jsdelivr.net/hls.js/latest/hl ...

  4. php 3 3公派算法代码,PHP常见算法合集代码实例

    许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣,下面是一些常用的算法和实例,大家可以好好学习下 一.文件夹遍历 function allFile($path = __DIR_ ...

  5. asp.net获取页面url参数值的实现代码实例

    asp.net获取页面url参数值的实现代码实例 file: default.aspx.cs using system; using system.data; using system.configu ...

  6. feign调用多个服务_Spring Cloud多个微服务之间调用代码实例

    这篇文章主要介绍了Spring Cloud多个微服务之间调用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 现在又一个学生微服务 user ...

  7. 多激光雷达外参⾃动化标定算法及代码实例

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 激光雷达是⽬前⾃动驾驶系统中的核⼼传感器之⼀,但是由于其信息密度低.存在垂直盲区等问题,⼚商⼤多在其L ...

  8. php设置背景图片的代码,css设置背景图片如何实现?(代码实例)

    本篇文章给大家带来的内容是关于css设置背景图片如何实现?(代码实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 很多人提交表单时都喜欢用一个图片来作为提交按钮,大多数人可能用J ...

  9. python雷达图数据_PYTHON绘制雷达图代码实例

    这篇文章主要介绍了PYTHON绘制雷达图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.雷达图 import matplotlib.py ...

  10. jQuery实现自动左右滚动效果的代码实例

    2019独角兽企业重金招聘Python工程师标准>>> jQuery实现自动左右滚动效果的代码实例 思路: 点击滚动模式下,是为点击(向前/向后/数字)添加click事件,通过控制展 ...

最新文章

  1. 安装python sklearn经验总结
  2. Java黑皮书课后题第3章:3.16(随机点)编写程序,显示矩形中一个随机点的坐标。矩形中心位于(0,0),宽100高200
  3. R-CNN目标检测第三弹(Faster R-CNN)
  4. 数据科学包15-matplotlib详细介绍
  5. Selenium 方法封装 一
  6. 转:Maven通俗讲解
  7. 下拉选择框 其他_WPS表格下拉菜单的多种做法(一)
  8. “很多人奉劝我控住分秒 恰反来我偏莽撞闯入年年岁岁”
  9. 科技文献检索与计算机应用试卷,科技文献检索期末上机考试试题
  10. c语言全局变量6,C语言全局变量定义方法
  11. 重装系统时,USB接口鼠标和键盘不能使用的解决办法
  12. 叶君—国画大师笔下的“忠义千秋”
  13. c语言输入一串字符统计各字母出现次数,统计输入字符各个字母出现频率的解题思路...
  14. 深度揭秘Java GC底层,这次让你彻底弄懂她
  15. Lemp + Wordpress 快速搭建个人博客
  16. 武汉有哪些大学 计算机专业比较强,武汉有哪些计算机好的大学排名
  17. ipx互联网分组交换协议_什么是X.25分组交换网络协议?
  18. 电脑搜不到wifi?新换的路由器
  19. Java实现模糊查询
  20. 【Kay】Java的一些Bonus

热门文章

  1. 闲谈IPv6-典型特征的一些技术细节
  2. Maven学习总结(九)——使用Nexus搭建Maven私服
  3. WebGL学习之纹理盒
  4. 使用 jetty-maven-plugin发布maven项目
  5. 用 go 实现跨平台 Autoit/AutoHotkey 和按键精灵功能示例代码
  6. 阿里古谦:阿里互联网架构的6大最佳实践-博客-云栖社区-阿里云
  7. python2 urllib 笔记
  8. 常用实验资源共享整理 20111026
  9. 【译】TCP Implementation in Linux
  10. 深入理解PHP之isset和array_key_exists对比