c/c++静态代码检查未使用函数

简介

检查unused的代码没有完美的解决方案,介绍比较多的是代码覆盖率检查工具,不能通过直接分析代码得到,需要代码运行起来。
静态代码检查的方式介绍比较少,这里推荐一种,那就是使用cppcheck工具

代码

test.h

#ifndef __TEST_H__
#define __TEST_H__

void Test();
int Func();

#endif  /*__TEST_H__*/

test.cpp

#include "test.h"

void Test()
{
}

int Func()
{
}

main.cpp

#include "test.h"

void *ThreadFunc(void *arg)
{
    Test();
}

int main(int argc, char **argv)
{
    return 0;
}

使用

#cppcheck --enable=unusedFunction --force ./
Checking main.cpp …
1/2 files checked 69% done
Checking test.cpp …
2/2 files checked 100% done
[test.cpp:7]: (style) The function ‘Func’ is never used.
[main.cpp:3]: (style) The function ‘ThreadFunc’ is never used.
这里代码比较简单,cppcheck可以精准地查找到未使用的函数,如果是大的工程,会有误报,
如果想进一步筛查,可以写个shell脚本来处理

筛查

find_unused.sh

#!/usr/bin/sh

if [[ ! $# -eq 2 ]]; then
    echo -e "usage $0 [unused.txt src_dir]"
    echo -e "查找未使用的函数,比如:$0 unusedTxt cutedevice/src"
    exit -1
fi

unusedTxt=$1
srcDir=$2

if [[ ! -f $unusedTxt ]]; then
    echo -e "$unusedTxt not exists"
    exhit -1
fi

if [[ ! -d $srcDir ]]; then
    echo -e "$srcDir not exists"
    exhit -1
fi

total=0
for thenFunction in `cat $1 | cut -d "'" -f 2`;
do
    count=`find $srcDir -name "*.cpp" -o -name "*.c" | xargs grep $thenFunction | wc -l`
    if [[ $count -le 1 ]]; then
        echo "$thenFunction"
        total=$(expr $total + 1)
    fi
done

echo "unused total:$total"

第一步使用cppcheck粗确地打印未调用的函数
#cppcheck --enable=style,unusedFunction --force ./src
得到类似[src/base/utility.cpp:486]: (style) The function ‘Xor’ is never used.
将其写到unused.txt中
然后调用此脚本进行筛选, ./find_unused.sh ./unused.txt ./src
这一步也不是很精确, 会导致一些未用的函数被忽略掉,可以再进一步人工排查后确定未调用的函数。
作者:帅得不敢出门 转载请注明出处

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C/C++语言编程安全子集是一种编程技术,旨在提供一种更加安全的编程方法,以减少程序的安全漏洞和错误。 为了实现C/C++编程语言的安全子集,需要采取以下几个方面的措施: 1. 内存管理:C/C++语言在内存管理方面存在一些安全隐患,如内存泄漏、缓冲区溢出等。安全子集可以提供更加安全的内存管理工具或技术,如智能指针、内存安全检查等,以减少这些安全风险。 2. 输入验证:C/C++语言对用户输入的验证较弱,容易受到各种攻击,如SQL注入、缓冲区溢出等。安全子集可以提供更强大的输入验证工具或技术,如正则表达式、输入过滤等,以增强程序的安全性。 3. 安全函数:C/C++语言存在一些不安全的函数,如strcpy()、sprintf()等,容易导致缓冲区溢出等安全问题。安全子集可以提供安全函数替代品,如strncpy()、snprintf()等,以减少这些安全风险。 4. 代码静态分析:安全子集可以提供代码静态分析工具,通过对程序的源代码进行分析,识别潜在的安全漏洞和错误,帮助程序员修复这些问题,提高程序的安全性。 5. 安全编码规范:安全子集可以提供安全编码规范,指导程序员编写安全的代码,包括如何处理用户输入、如何进行内存管理等,以减少程序的安全漏洞。 总之,C/C++语言编程安全子集是一种通过采取各种措施来增强C/C++程序的安全性的编程技术。通过使用这种技术,程序员可以减少安全漏洞和错误,提高程序的可信度和鲁棒性。 ### 回答2: C/C++语言编程安全子集是指使用C/C++语言编写程序时,遵循一些规范和最佳实践,以确保程序的安全性和可靠性。下面是一些常见的C/C++语言编程安全子集的要点: 1. 错误处理:正确处理错误和异常,避免程序断和崩溃。合理地使用try-catch语句块,及时捕获异常并进行必要的处理和恢复。 2. 输入验证:对所有输入数据进行验证和过滤,防止恶意输入和错误输入导致的安全漏洞。例如,使用正则表达式对输入进行格式检查,限制输入字符长度等。 3. 内存安全:合理地使用动态内存分配和释放操作,避免内存泄漏和缓冲区溢出。使用智能指针和RAII(资源获取即初始化)技术,确保资源的正确释放。 4. 安全算法和加密:在需要处理敏感数据或进行安全传输时,使用安全的算法和加密方法。例如,使用AES加密算法对数据进行加密,确保数据机密性和完整性。 5. 安全库函数使用安全的库函数来替代不安全的函数,以减少安全漏洞的风险。例如,使用strncpy()代替strcpy(),使用snprintf()代替sprintf()等。 6. 安全编码规范:遵循安全编码规范,使用安全的编码风格和命名规则。例如,避免使用不安全的函数和不规范的变量命名,注重代码的可读性和可维护性。 7. 防止代码注入:对于用户输入的代码或数据,进行严格的验证和限制,避免恶意注入攻击。例如,使用参数化查询代替动态SQL查询,使用过滤器和白名单等。 总之,C/C++语言编程安全子集是一系列的安全编程准则和最佳实践,旨在保护程序免受常见的安全漏洞和攻击。开发人员应该积极采用这些准则,加强代码的安全性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值