Buy Me a Coffee

在大型專案 要去分析程式修改範圍或是C/C++程式的有哪些函式總是困擾

使用以下正則表達式從 C/C++ 源程式文件中提取函數定義:

Regex regex = new Regex(@"\b((virtual|static|inline|__forceinline|__inline|__inline__)*\s+)*([\w<>_]+\s+[*&]*\s*)([\w_]+)\s*\((.*?)\)\s*({?)", RegexOptions.Multiline);

以下是正則表達式的簡要說明:

\b:匹配一個單詞邊界 ((virtual|static|inline|__forceinline|_inline|inline)\s+):匹配列出的關鍵字(virtual、static、inline、__forceinline、__inline、inline)和空格字符(如空格或制表符)的任意組合。 ([\w<>_]+\s+[&]\s):匹配函數的返回類型,可以包括模板參數以及返回類型的指針或引用。 ([\w]+):匹配函數名。 \s*((.?))\s:匹配括號內的參數列表,包括括號前後的任何空格字符。.*?以非貪婪的方式匹配任何字符,因此它會在遇到第一個閉括號時停止匹配。 ({?):匹配函數體的左大括號,如果有的話。 請注意,此正則表達式假設源程式文件格式良好,沒有任何語法錯誤。它也不能處理所有可能的 C/C++ 函數定義變體,例如使用函數指針或變長參數的函數定義。

以下是如何使用正則表達式從 C/C++ 源程式文件中提取函數定義的範例:

string sourceCode = File.ReadAllText("MyFile.cpp");
MatchCollection matches = regex.Matches(sourceCode);

foreach (Match match in matches)
{
    string returnType = match.Groups[3].Value.Trim();
    string functionName = match.Groups[4].Value.Trim();
    string parameters = match.Groups[5].Value.Trim();

    Console.WriteLine("Found function: {0} {1}({2})", returnType, functionName, parameters);
}

此程式讀取名為"MyFile.cpp"的文件的內容,並使用正則表達式從文件中提取所有函數定義。然後,它循環遍歷每個匹配項,並使用Match對象的Groups屬性從匹配項中提取返回類型、函數名和參數列表。最後,它為每個函數輸出提取的資訊。