当前位置: 首页 > 知识库问答 >
问题:

c - Vim要怎么找到一个C语言函数定义的开头呢?

韩羽
2023-09-20

Hello!.
我希望能在这一点上进行自动化作业.
我试过},但这个按键是跳到下一个空行隔开的段落.
]]键可以跳转到大括号的开头,但大括号也可能是给struct{}使用的.
所以我现在在用/(.*)\s*\n{这东西查找,然后肉眼识别找到的是不是函数.说真的很麻烦,因为源文件没有这么整齐.
有没有办法自动找到一个函数开头的东西?
像比较极端的比如这种,真的很难办.

共有1个答案

狄德泽
2023-09-20

在Vim中,你可以使用/命令结合正则表达式来查找函数定义。下面是一个可行的正则表达式:

/^(\w+\s*)\s*\{

这个正则表达式的意思是匹配以一个或多个单词(被空格分隔)开始,后面跟着任意数量的空格,然后是一个大括号。这个正则表达式应该能匹配大部分C语言函数定义的开始。

在Vim中,你可以通过以下步骤使用这个正则表达式来找到函数定义:

  1. 打开你的C语言源文件。
  2. 移动光标到你想要查找的函数的上文。
  3. 按下/键打开搜索框。
  4. 在搜索框中输入上面的正则表达式,然后按下回车键。

如果Vim找到了匹配的函数定义,它会将光标自动跳转到那个位置。如果没有找到,你可能会看到一个消息告诉你没有找到匹配。

这个正则表达式并不能完全准确,例如它也会匹配到一些非函数的起始大括号,但是它应该能作为一个好的起点,而且比你自己手动查找要快得多。如果你想要一个完全准确的匹配,你可能需要更复杂的正则表达式或者使用其他更适合这个任务的工具,如ctags或其他代码导航工具。

 类似资料:
  • 主要内容:C语言无参函数的定义,C语言有参函数的定义,函数不能嵌套定义函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收。接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以将函数分为有参函数和无参函数。 将代码段封装成函数的过程叫做 函数定义。 C语言无参函数的定义 如果函数不接收用户传递的数据,那么定义时可以不带参数。如下所示: dataType  functionName(){     //

  • 1. 函数的声明和定义 函数头与函数体两部分组成。其中函数头部分包含函数的返回值类型,函数名,函数的参数;函数体部分由实现函数功能的一条至多条语句组成。 返回值类型 函数名(函数) { 程序语句 } 使用函数要先定义再使用。 2. 示例程序 #include <stdio.h> int week(int w) { switch (w) { case 1:

  • #define 叫做 宏定义命令,它也是C语言预处理命令的一种。所谓 宏定义,就是用一个标识符来表示一个字符串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。 我们先通过一个例子来看一下 #define 的用法: 运行结果: 120 注意第 6 行代码 , 被 代替了。 就是宏定义, 为宏名, 是宏的内容(宏所表示的字符串)。在预处理阶段,对程序中所有出现的“宏名”,预处理器都会

  • C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实际参数”,这点和函数有些类似。 对带参数的宏,在展开过程中不仅要进行字符串替换,还要用实参去替换形参。 带参宏定义的一般形式为: #define 宏名(形参列表) 字符串 在字符串中可以含有各个形参。 带参宏调用的一般形式为: 宏名(实参列表); 例如: 在宏展开时,用实参 5 去代替形参 y,经预处理程序展开后的语句

  • 1. 函数的定义 程序是由一个个函数组成的。我们之前虽然没有正式介绍函数,但是我们早已经开始使用函数了。因为离开了函数,我们的程序没有办法正常的工作。只不过我们使用的是 C 语言内置的标准函数库。 那么函数是什么? 函数是由一组语句组成完成至少一个特定任务的语句的集合。在 C 语言中,我们必须要包含一个函数,就是我们最开始介绍的 mian 函数。 2. 为什么需要函数? 函数帮助我们可以减少代码的

  • 主要内容:C语言难吗?,C语言是计算机产业的核心语言对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员。 C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的,程序在内存中是一种怎样的状态,操作系统和用户程序之间有着怎样的“爱恨情仇”,这些底层知识决定了你的发展高度,也决定了你的职业生涯。 如果你希望成为出类拔萃的人才,而不仅仅是码农,这么这些知识就是不可逾越的。