如何显示函数开始、结束行和函数体?
How to display function starting, ending line and function body?
假设我有一个字典,里面有几个文件.cpp其中定义了一些C++函数。
示例:文件.cpp
int sum(int a, int b) {
return a + b;
}
void display(int a){
cout << a;}
int square(int a) {
return a * a;
}
我的问题由两部分组成:
- 如何打印出特定功能的开始和结束行?
- 如何打印出整个函数体?
我想写一个 bash 脚本。
假设我想搜索函数总和。
期望输出:
Function sum is defined between lines 1 and 3.
int sum(int a, int b) {
return a + b;
}
迄今取得的进展:
grep -rin --include=*.cpp -ri "sum" | cut -d: -f2
上面的命令打印函数总和的起始行号,即在我的例子中是第 1 行。
C++不是你可以轻松解析的东西。 例如,此代码:
int func(a::b<c>d);
你不能说它是一个声明(命名空间a
中b
模板化类的实例d
(还是表达式(如果你b
类a
的静态成员与c
进行比较,然后是与d
的比较的结果(,而无需解析标头和声明。
现在,让我们将其拆分为多行:
int func(a::
b<c>
d,
e f);
起跑线是什么?
也:
int func(a::b<c, d> g, e<f>);
您将在此处看到,在后一种情况下,搜索逗号的正则表达式将失败,因为您将触发d
作为参数(或者更糟的是,d >
作为类型(。 您可以拥有多个级别的嵌入式模板,因此您需要在正则表达式中进行反向查找来解决此问题。
最后,你最终会(重新(编写编译器的前端,这是一项非常复杂的任务。
所以要回答你的问题,你不能在 bash 中做到这一点(恕我直言(。 如果我是你,我会在这里使用 clang 并让它为你查找和提取函数签名,并可能找到函数的行首和行尾。 如果,我猜,你的目的是提供代码完成,那么这里有一个用法示例:
clang -fsyntax-only -Xclang -code-completion-macros -Xclang -code-completion-patterns -Xclang -code-completion-brief-comments -Xclang -code-completion-at=file:line:col <clang-build-options here> <file>
相关文章:
- 用C++在单独的头文件中完成函数体
- 我可以在 C++ 中的函数体之外进行操作吗?
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- binary_search() 函数在我的函数体中不起作用
- 如何显示函数开始、结束行和函数体?
- 主函数体未检测到对重载可变变量模板化函数C++的调用
- 错误:函数声明符之后的预期函数体
- 带有文件结束函数的 while 循环重复输出文件中的最后一个数字两次
- C++编译器如何检测非常量函数体
- 使用委托调用构造函数和在另一个构造函数体中调用的区别
- Flex和Bison忽略了函数体
- 我看到将我的类成员函数指定为内联实际上会增加执行时间,即使函数体非常小
- 为什么将函数体放置在单独的源代码文件而不是标题中的C/C 中
- 类(模板)成员函数体内部的ADL查找
- 在 C++ 中结束函数
- 如果未设置编译符号,如何排除方法?如何传递可变数量的参数并在函数体中格式化它们
- constexpr函数体c++14中可以有非文字类型的定义变量吗
- 内联失败:可以在链接时覆盖函数体
- C++函数体中的Const变量
- 在类定义之外的模板类成员函数体中,何时需要模板参数