About Lint
Created|Updated
|Post Views:
lint 或者 linter是 一种静态程序分析工具
这里的静态是指在不运行程序的情况下检查代码潜在的问题
最早在Unix平台上开发用于检查C语言程序的
后来被其他的语言借鉴形成了各种各样的lint工具,以提升代码的健壮性
splint 是现在的 linux上的lint工具 安装方法 如下
1 | # apt-get install -y splint |
splint 从哪里知道的?
来自《C专家编程》中的某个章节
简单用法
1 | // func.c |
1 | $ splint func.c |
会输出警告信息
详细用法可以参考
1 | man splint |
Author: wang shaodong
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles
2020-02-25
keywords
关键字与标识符经常考察的关键字 const * 常量 和指针一起 考察 voliate * 容易修改,禁止编译器优化,嵌入式,和多线程环境 extern * 外部引用,声明 static * 本文件,或者本函数可用,本类可用 auto * 自动变量、栈变量, 类型推导 register * 请求编译器将 变量放到寄存器 不常见的关键字 restrict *
2020-02-15
C 语言中的main函数
C语言中main写法12345678910111213141516171819202122232425// 接受任意参数但不起作用int main(){ return 0;}// 明确不接受任何参数int main(void){ return 0;}// argc 参数的个数, argv 指向参数字符的首地址int main(int argc, char **argv){ return 0;}// 同上,第二个参数的不同写法int main(int argc, char *argv[]){ return 0;}// 此版本可以打印出环境变量int main(int argc, char *argv[], char *env){ return 0;} 关于main函数 main函数并非必须存在,只是约定俗成的一个程序启动入口罢了,main函数被crt(C语言运行时)调用可以通过编译器指令来替换入口函数 12345678// entry.c#includ...
2020-02-24
C++ VS c
C++ 曾经被叫做C With class, C++ 是兼容C的,并不是100%兼容 C++ 中的C子集是C++的一部分,C语言中允许的东西到C++中可能会不允许 全局变量初始化: C语言中只能使用 constant初始化全局变量 C++可以通过函数初始化 123456789101112131415#include <stdio.h>int init(){ printf("inside init func\n"); return 100;}int global_int = init(); // 此语句cpp文件能够编译执行,c文件编译失败int main(){ printf("Hello world\n"); printf("global_int= %d\n", global_int); return 0;} C++的C子集 是更好的C,将C中的一些不严格的编译检查,变得相对更严格C++ 编译器编译之后函数的 mangling n...
2020-01-24
About sizeof
sizeof 的误解,sizeof 不是函数(function),是运算符(operator) 函数在程序运行的时候起作用,运算符求出来的大小是在编译时就确定下来的 常见的sizeof操作 对结构体类型求大小 1234567891011typedef struct { char a; int b; char *ptr; double c; char name[19];} Demo;// 结构体的实际所占用内存大小,需要内存对齐,按照4byte或者8byte对齐,// 对齐的原则整体大小能被4整除,而且每个成员的地址偏移都是4的整数倍std::cout << sizeof(Demo) << std::endl; 对联合体求大小 1234567891011#include<stdio.h>// 联合体的大小是能够容纳最大的成员的大小, 还要考虑一下四字节对齐typedef union { int a[3]; char b[8] ;} data;int main()...
2020-02-18
位运算、原码、反码、补码
位运算的地位 以下内容摘自《枕边算法书》感觉对于位运算描述的很形象 对于程序员来说,”位” 相当于现实世界中构成水和空气的粒子。编程世界的所有东西都会从位开始,以位结束。刚步入编程世界的初学者看到整数就是整数,看到字符串就是字符串。但功力深厚的程序员眼中无论整数还是字符串,它们都是位。 与系统编程不同,一般应用程序的编程对位运算的要求并不高。即使如此,很少有程序员不懂位运算,因为在不懂位运算的情况下编程写程序,就像在现实世界中不呼吸、不喝水一样,几乎不可能。 位运算的类型 运算符 含义 & 按位与:全1才1,否则都0 | 按位或:有1得1,全0才0 ^ 按位异或:相异为真,相同为假 >> 右移:对于有符号数的右移分为算术右移和逻辑右移 << 左移:比较简单不论是否有符号整数 ~ 取反:每个位1变0,0变1 对于正整数而言,左移1位就是x2,右移就是除2 下图来自《Computer Systems - A Programmer’s Perspective》 算术右移:直接右移n位,...
2020-05-23
namespace
namespace (命名空间) 是C++的一个关键字 不同的命名空间中相同的标识符在编译的时候不会产生错误 在不同的命名空间中可以使用相同名字的变量或者函数名称 C 语言的标识符 也有命名空间 (内容来自 C语言规范草案 6.2.3 节) label names标签名 包括 goto 语句 中用到的标签和 switch case中的 标签 the tags name of structures, unions and enumurations结构、联合、枚举的tag名 the members of structures or unions; each structure or union has a seperate name space for its number;结构体、联合的成员名 all other identifiers,called ordinary identifiers (declared in ordinary declarators or asenumeration constants)其他普通的变量,或者枚举常量 C++中使用namesapce ...
Announcement
This is my Blog