解析C++以对代码进行一些更改

use*_*099 11 c++ parsing

我想编写一个小工具,它接受一个C++程序(单个.cpp文件),找到"main"函数并向其添加2个函数调用,一个在开头,一个在最后.

如何才能做到这一点?我可以使用g ++的解析机制(或任何其他解析器)吗?

Joh*_*itb 8

如果你想使它坚固,请使用clang的库.


Lam*_*eek 6

正如一些评论者的建议,让我提出我的想法作为答案:

所以基本上,这个想法是:

... original .cpp file ...

#include <yourHeader>
namespace { 
  SpecialClass  specialClassInstance;
}
Run Code Online (Sandbox Code Playgroud)

在哪里SpecialClass是这样的:

class SpecialClass {
  public:
    SpecialClass() {
        firstFunction();
    }

    ~SpecialClass() {
        secondFunction();
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,您就不需要解析C++文件.由于您声明了一个全局变量,它的构造函数将在main启动之前运行,并且它的析构函数将在main返回之后运行.

缺点是您无法了解构建全局的时间与其他构建的相对顺序.因此,如果你需要保证firstFunction在整个程序中的其他任何构造函数之前调用它,那你就不走运了.