当前位置: 首页 > news >正文

提取“c语言的函数定义“脚本

------------------------------------------------------------
author: hjjdebug
date:   2024年 08月 11日 星期日 16:35:31 CST
description: 提取c语言的函数定义脚本
------------------------------------------------------------
 c 文件中包含很多函数定义, 我想在每个函数上设置断点.
 这需要首先知道所定义的函数名称.
 曾经想找一个能提取出c函数名的正则表达式, 网上找了一下,达不到要求.
 一个正则表达式是搞不定的.
 但我需要一个脚本, 不需要太精确,能大体搞定就可以了.
 所以我写了一个脚本,满足如下4个条件才可能是函数定义.

 1. 该行不能包含分号";"
    例如: int add(int x, int y);
    它只是一个函数声明而不是函数定义
 2. 该行必需有"("
    这很明显,没有"("肯定不是函数定义行
 3. 该行必需有")", 并且)到行尾之间不能有除白空格以外的其它东西
    例如: if((ret = open_input(filename)) < 0) 就不是函数定义
 4. "(" 前至少有2部分, 返回类型和函数名称
    例如: while (a > b) 就不是函数定义
    "(" 前只有一部分 while, 所以它不是一个函数

满足这4个条件仍然可能不是函数定义, 
是的, 完美判断一个单词是否是函数定义需要词法分析和句法分析,太麻烦.
经过这4个条件过滤,大体都是正确的了,满足了我的要求.
当然如果不满足要求,你还可以再补充.

所以不要迷恋正则表达式,而应该迷恋编程,

艺术品是一刀一刀刻出来的,而不是一蹴而就的.

附: 我写的代码:
 

#!/bin/bash
if [ $# -lt 1 ]
thenecho "Usage $0 <filename>"echo "Usage $0 1.c"exit 1
fi
while read line 
doif [ "${line/;/}" != "${line}" ]; then  continue;  fi  #包含";" 继续if [ "${line/(/}" == "${line}" ]; then  continue;  fi  #不包含"(",继续#不包含")\s*$" 继续, 由于用到了正则,所以使用了grep命令,并把输出丢弃if ! echo $line |grep ")\s*$" >"/dev/null" ; then continue; fi #提取 “(" 前部分,由它继续过滤name0=$(echo $line | awk -F '(' '{print $1}')# 函数定义至少要2部分, 第1部分为返回类型,第2部分为函数名, 不满足者继续# 多于2部分是可能的, 例如第一部分是修饰词"static" "const" 等name=$(echo $name0 | awk -F' ' '{if(NF>=2) print $NF; else print ""}')if [ "$name" == "" ] ;then continue; fi # 这会去掉 "if","while"等语句echo $name
done < $1

http://www.lryc.cn/news/420757.html

相关文章:

  • pytorch学习(十二):对现有的模型进行修改
  • 服务器虚拟内存是什么?虚拟内存怎么设置?
  • 深度学习入门指南(1) - 从chatgpt入手
  • Python学习笔记(六)
  • 大数据安全规划总体方案(45页PPT)
  • 第20周:Pytorch文本分类入门
  • 记一次 SpringBoot2.x 配置 Fastjson请求报 internal server 500
  • OSPF笔记
  • IOC容器初始化流程
  • 第二季度云计算市场份额榜单:微软下滑,谷歌上升,AWS仍保持领先
  • 三点确定圆心算法推导
  • 神经网络 (NN) TensorFlow Playground在线应用程序
  • 腾讯课堂 离线m3u8.sqlite转成视频
  • Linux多路转接
  • IDEA导入Maven项目的流程配置以常见问题解决
  • 【数据分析---- Pandas进阶指南:核心计算方法、缺失值处理及数据类型管理】
  • 2024世界机器人大会将于8月21日至25日在京举行
  • 【Linux】lvm被删除或者lvm丢失了怎么办
  • 疫情防控管理系统
  • 永久删除的Android 文件去哪了?在Android上恢复误删除的消息和照片方法?
  • 宠物服务小程序多生态转化
  • 今天细说一下工业制造行业MES系统
  • C++ 知识点(长期更新)
  • Spring AI + 通义千问 入门学习
  • 38.【C语言】指针(重难点)(C)
  • Vue-05.指令-v-for
  • 自动驾驶的一些大白话讲解
  • Python学习笔记--参数
  • 刷题——大数加法
  • Pytorch人体姿态骨架生成图像