找到一个函数名并计算其LOC

Jus*_*ten 4 c++ string

所以你知道了,这是我被分配的项目.我不是在寻找代码中的答案,而是更多的方向.

我被告知要做的是查看文件并计算实际的代码行,同时记录函数名称和函数的各行代码.我遇到的问题是从文件中读取时确定一种方法,以确定该行是否是函数的开头.

到目前为止,我只能想到可能有一个数组类型的字符串数组(int,double,char等),在行中搜索,然后搜索括号,然后搜索没有分号(所以我知道这不仅仅是函数的声明).

所以我的问题是,我应该如何解决这个问题,还是有其他方法可以推荐?

我将计算的代码将使用C++.

der*_*ert 7

我想到了三种方法.

  1. 使用正则表达式.这与您的想法非常相似.寻找看起来像函数定义的行.这样做很快,但在很多方面都可能出错.

    char *s = "int main() {"
    
    Run Code Online (Sandbox Code Playgroud)

    不是函数定义,但肯定看起来像一个.

    char
    * /* eh? */
    s
    (
    int /* comment? // */ a
    )
    // hello, world /* of confusion
    {
    
    Run Code Online (Sandbox Code Playgroud)

    是一个函数定义,但看起来不像一个.

    好:写得快,即使面对语法错误也能正常工作; 坏:很容易在看起来像(或看起来不像)"正常"的情况下失火.

    变体:首先运行代码,例如GNU缩进.这将解决一些(但不是全部)失火问题.

  2. 使用适当的词法分析器和解析器.这是一种更彻底的方法,但您可以重用开源词法分析器/解析(例如,从gcc).

    好:将100%准确(永远不会失火).坏:一个丢失的分号,它会出现错误.

  3. 查看您的编译器是否有一些可能有用的调试输出.这是(2)的变体,但使用编译器的词法分析器/解析器而不是您自己的.