前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >阅读C++源码就这么简单,来写一个工具辅助吧。

阅读C++源码就这么简单,来写一个工具辅助吧。

作者头像
公众号guangcity
发布于 2024-05-08 03:15:54
发布于 2024-05-08 03:15:54
16300
代码可运行
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)
运行总次数:0
代码可运行

利用Python协助解读C/C++程序源码

导语

通常我们希望想看看Redis源码,可惜太慢太多,思维太乱,于是想到看是否用Python可以分析出这个源码直接的依赖关系。

这里说的依赖关系指的是,假设有一个C/C++程序,如下redis-cli.c

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "fmacros.h"
#include "version.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <time.h>
#include <ctype.h>
#include <errno.h>
#include <sys/stat.h>

针对这个文件它引入了多个头文件,当很多个c程序放到一块的时候,比如在阅读redis源码的时候,你又是如何知道本地文件之间的依赖关系呢?

是不是很乱,也没有框架感,于是今天这个项目就是解决这种问题,上述就可以得到当前c/c++文件下有多少个头文件,相互之间的依赖关系图。

于是,我们今天这个项目出来了,代码行数很少,但是我个人觉得非常有意思,也非常使用。

下面让我来给大家分析与展示实现思路。下面放上我的代码地址(或者点击阅读原文),如果你需要,欢迎去下载,非常感谢你可以顺手star!

https://github.com/Light-City/PyLookSrcRelation

支持的功能

目前支持如下功能:

输出定制,可输出pdf、png、jpg、svg等格式

是否展示出系统头文件

支持文件夹扫描所有依赖关系

支持单个文件依赖关系

支持C与C++源码依赖

ok,以上就是目前所有的功能。

如何使用:

clone 下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone git@github.com:Light-City/PyLookSrcRelation.git

用户设置如下: -s参数为在c/c++程序中寻找的头文件信息,默认为'#include ' -d参数为文件夹或者c、c++文件 -i参数为包含系统头文件,如果添加这个参数就是包含,不加就是不包含。 -o参数为输出格式,默认值为pdf,可以选择png、svg等

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python  pylsr.py -h                                                                                                                                 
usage: search.py [-h] [-s S] [-d D] [-i] [-o O]

Help you understand the source code.

optional arguments:
  -h, --help   show this help message and exit
  -s S, --s S  search xx.c/xx.cpp/xx.h etc
  -d D, --d D  your c/cpp file or c/cpp dir
  -i, --i      if you add this config,it will include the head file
  -o O, --o O  output format

只需修改这四个参数,即可实现以上所有功能。

示例1:读取文件夹,解析所有的c/c++程序的头文件依赖关系,并输出pdf格式文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python pylsr.py -d './src/' -o 'pdf'

示例2:读取文件,解析c++程序的头文件依赖关系,并输出png格式文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python pylsr.py -d 'test.cpp' -o 'png'

示例3:读取文件,解析c++程序的头文件依赖关系,包含系统头文件,并输出svg格式文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
```python
python pylsr.py -d 'redis-cli.c' -i -o 'svg'
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C/C++与Python双剑合璧
&nbsp;&nbsp;&nbsp;&nbsp;python作为一门动态语言,语法的灵活性和强大的模块支持使得开发效率大大提升,传统C/C++程序员可以借助python来实现业务逻辑来减少开发成本。而另一方面,python灵活的语言特性带来的代价是性能的降低,在一些密集计算型任务面前显得力不从心,但这个问题可以由C/C++来解决,将对性能要求较高的部分用C语言来实现即可, 而且对于一些加密解密算法,还可以保持源码的私密性。而本文正是针对两者的双剑合璧,对C/C++与python相互调用的讲解。
菜菜cc
2022/11/15
9600
C/C++与Python双剑合璧
C/C++生态工具链——gcc/g++编译器使用指南
GCC的全称是GNU Compiler Collection,是GNU工具链中的一种。GCC不仅支持C/C++语言,还支持Fortran/Ada/Java等语言的编译。
Coder-ZZ
2023/02/23
2.8K0
C/C++生态工具链——gcc/g++编译器使用指南
简单的Python调用C++程序
最近写BUG的时候遇到python计算很慢的情况,于是调研了一波在python中嵌入C++程序的方法,记录一下,便于查询。
润森
2022/09/22
8150
C和C++编译工具的基本使用方法
GCC:GNU Compiler Collection,中文叫 “GNU编译器套件”,它可以编译C、C++、JAVA、Go、Object-C等语言。
极客开发者
2022/01/18
1.4K0
简单的Python调用C++程序
最近写BUG的时候遇到python计算很慢的情况,于是调研了一波在python中嵌入C++程序的方法,记录一下,便于查询。
小白学视觉
2025/02/25
2690
简单的Python调用C++程序
简单上手nodejs调用c++(c++和js的混合编程)
因为项目的原因,最近经常使用node.js搭RESTful接口。 性能还是很不错啦,感觉比Spring Boot之类的要快。而且在不错的性能之外,只要程序结构组织好,别让太多的回调把程序结构搞乱,整体开发效率比Java快的就太多了。
俺踏月色而来
2018/08/10
5.5K0
简单上手nodejs调用c++(c++和js的混合编程)
Matplotlib for C++不完全手册
matplotlib-cpp是Matplotlib(MPL)为C++提供的一个用于python的matplotlib绘图库的C++包装器。它的构建类似于Matlab和matplotlib使用的绘图API。
艰默
2024/01/11
1.2K0
Matplotlib for C++不完全手册
C++服务编译耗时优化原理及实践
大型C++工程项目,都会面临编译耗时较长的问题。不管是开发调试迭代、准入测试,亦或是持续集成阶段,编译行为无处不在,降低编译时间对提高研发效率来说具有非常重要意义。
美团技术团队
2020/12/14
2.1K0
C++服务编译耗时优化原理及实践
c比python快多少倍_python和c++哪个简单
这是因为不同编程语言有各自的适用场景和语法特性,联合编程可使得各种语言发挥自己的特长。本文主要比较Python和C++,先列举各自特点如下:
全栈程序员站长
2022/11/10
2.1K0
c比python快多少倍_python和c++哪个简单
C语言中.h和.c文件解析
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:
用户6754675
2020/07/14
3.2K0
再探C/C++扩展Python
    上篇博文是初用c/c++扩展Python,只是简单的举个例子,有兴趣的可以去上篇博文里看看那个例子的代码,代码如下:
py3study
2020/01/07
7950
【C++ 语言】 C 与 C++ 兼容 ( extern "C" )
5. 选择启动项 : 点击绿色的小三角按钮 “选择启动项” , 选择上面生成的解决方案 “001_CMake_1.exe” 选项 , 如下图示 ;
韩曙亮
2023/03/27
3K0
【C++ 语言】 C 与 C++ 兼容  ( extern "C" )
在C++中调用Python
虽然现在Python编程语言十分的火爆,但是实际上非要用一门语言去完成所有的任务,并不是说不可以,而是不合适。在一些特定的、对于性能要求比较高的场景,还是需要用到传统的C++来进行编程的。但是C++的一个缺点是比较难找到很好的轮子,这也是很多人专用Python的一个重要原因。这篇文章我们要介绍的是一个比较特殊的场景——用C++的代码去调用Python函数中实现的一些功能。这样的话,如果代码的主体还是用C++完成的,而部分功能为了简便,引入一些Python中已经封装好的函数,这样就可以很好的结合两种语言各自的特点。而另一种工作方式:通过Python来调用一些C++或者Fortran中实现的高性能函数,可以参考这一篇博客。这两种不同的使用方法各有优劣,但是如果以Python为主导,就很难避开GIL的问题,这里我们就不过多的展开。
DechinPhy
2021/05/27
4.9K0
h文件和c文件的区别include本身只是一个简单的文件包含预处理命令,即为把include的后面文件放到这条命令这里,除此之外,没有其它的用处(至少我也样认为).
其实在H文件里写函数也无所谓,只是不符合习惯而已。只要按照以上的格式写,一个H文件添加多少次都无所谓,
仇诺伊
2018/11/22
1.7K0
【C++】开源:matplotlib-cpp静态图表库配置与使用
项目Github地址:https://github.com/lava/matplotlib-cpp
DevFrank
2024/07/24
8960
如何阅读Redis 源码
Redis 实际上是简称,全称为 Remote Dictionary Server (远程字典服务器),由 Salvatore Sanfilippo 写的高性能 key-value 存储系统,其完全开源免费,遵守 BSD 协议。Redis 与其他 key-value 缓存产品(如 memcache)有以下几个特点。
秦怀杂货店
2024/12/07
1310
如何阅读Redis 源码
面向 C++ 的现代 CMake 教程(二)
现在我们已经收集了足够的信息,可以开始讨论 CMake 的核心功能:构建项目。在 CMake 中,一个项目包含管理将我们的解决方案带入生活的所有源文件和配置。配置从执行所有检查开始:目标平台是否受支持,是否拥有所有必要的依赖项和工具,以及提供的编译器是否工作并支持所需功能。
ApacheCN_飞龙
2024/05/26
9730
面向 C++ 的现代 CMake 教程(二)
如何使用C++通过thrift访问HBase进行操作
上周六,接了一个紧急任务,说实现使用 C++ 访问 HBase 进行操作。说是用 thrift 来实现。对于 C++ 来说,我真的是门外汉,但需求如此,皱着眉头也要把它实现。好歹在同事的帮助下,也是实现了 demo 示例,现在就把这两天的成果分享给大家。
create17
2019/05/14
3.4K0
如何使用C++通过thrift访问HBase进行操作
【C++】开源:oatpp-web框架配置与使用
用C++开发web也不是不行,这不,oatpp就是一个轻量、跨平台、高性能的web框架。
DevFrank
2024/07/24
1.3K0
【C++】开源:oatpp-web框架配置与使用
mac 使用Clang(Next-gen compiler infrastructure)配置VS Code C/C++环境
如果想使用 gcc 指令来编译执行 C++ 程序,需要在使用 gcc 指令时,手动为其添加
早起的鸟儿有虫吃
2025/01/12
5901
mac 使用Clang(Next-gen compiler infrastructure)配置VS Code C/C++环境
相关推荐
C/C++与Python双剑合璧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验