织赢在路上ios开发培训中心提供:iOS培训,iOS培训班,iOS工程师培训,iOS程序员培训,iOS开发,iOS编程,iOS系统开发等一系列培训服务。

免费咨询热线:4006-113-575
当前位置: > C语言 >

看一下下面的代码(当然包括错误

时间:2016-02-22 01:52来源:网络整理 作者:iOS开发 点击:
Ubuntu系统下C语言代码检查工具-- Splint

看一下下面的代码(当然包括错误,以检验splint的功能):

#include int main(int argc,char* argv[]){ int a=100; /*没有使用的变量*/ int b[8]; printf("Hello c\n"); b[9]=100; /*明显数组越界 */ /* 用到了两个为声明的变量c和d/ c=100; d=10; return 0; }


现在可以用splint来检查一下,为了检验是否可以检测到数组越界,使用+bounds选项。 splint hi.c +bounds 输出结果:

hi.c: (in function main) hi.c:9:2: Unrecognized identifier: c Identifier used in code has not been declared. (Use -unrecog to inhibit warning) hi.c:10:2: Unrecognized identifier: d hi.c:4:6: Variable a declared but not used A variable is declared but never used. Use /*@unused@*/ in front of declaration to suppress message. (Use -varuse to inhibit warning) hi.c:7:2: Likely out-of-bounds store: b[9] Unable to resolve constraint: requires 7 >= 9 needed to satisfy precondition: requires maxSet(b @ hi.c:7:2) >= 9 A memory write may write to an address beyond the allocated buffer. (Use -likely-boundswrite to inhibit warning) hi.c:3:14: Parameter argc not used A function parameter is not used in the body of the function. If the argument is needed for type compatibility or future plans, use /*@unused@*/ in the argument declaration. (Use -paramuse to inhibit warning) hi.c:3:25: Parameter argv not used Finished checking --- 6 code warnings


现在详细看一下结果: 检查结果1:

hi.c:9:2: Unrecognized identifier: c Identifier used in code has not been declared. (Use -unrecog to inhibit warning) hi.c:10:2: Unrecognized identifier: d hi.c:4:6: Variable a declared but not used A variable is declared but never used. Use /*@unused@*/ in front of declaration to suppress message. (Use -varuse to inhibit warning)


这些应该是splint检测到变量c和d没有声明。 检查结果2:

hi.c:7:2: Likely out-of-bounds store: b[9] Unable to resolve constraint: requires 7 >= 9 needed to satisfy precondition: requires maxSet(b @ hi.c:7:2) >= 9 A memory write may write to an address beyond the allocated buffer. (Use -likely-boundswrite to inhibit warning)


这些是检查存在数组越界,因为吧b[8]的最大数组序号应该是7,而不是9,所以出现requires 7 >= 9; 检查结果3:

hi.c:3:14: Parameter argc not used A function parameter is not used in the body of the function. If the argument is needed for type compatibility or future plans, use /*@unused@*/ in the argument declaration. (Use -paramuse to inhibit warning) hi.c:3:25: Parameter argv not used

(责任编辑:admin)
织梦二维码生成器
------分隔线----------------------------
栏目列表
推荐内容