Для типа 3 регулярные выражения могут помочь, если я ищу следующую строку, содержащую ровно 2 запятых между скобками A (, , *) (на самом деле я не знаю синтаксиса программирования для RE)
Но для типа 2 это не сработает.
Есть ли какая-либо техника, которую я могу использовать, чтобы найти вызов функции по ее сигнатуре?
Ну, кроме того, что вы ищите свои файлы с помощью некоторого регулярного выражения (например, с помощью поиска файлов Notepad ++, egrep или аналогичного), и, предполагая, что вы можете изменить исходный код, где эти функции объявлены / определены, вы можете использовать некоторый стандарт компилятора функция типа атрибута [[deprecated]]
:
void A(int i) {
/* some code */
}
[[deprecated]] void A(string s) {
// ^^^^^^^^^^^^^^
/* some code */
}
[[deprecated]] void A(string s, int i) {
// ^^^^^^^^^^^^^^
/* some code */
}
Это покажет вам предупреждения при использовании этих функций:
int main() {
A(5);
A("Hello");
A("Hello",42);
}
main.cpp:9:25: note: declared here
[[deprecated]] void A(string s) {
^
main.cpp:20:18: warning: 'void A(std::__cxx11::string)' is deprecated [-Wdeprecated-declarations]
A("Hello");
^
main.cpp:9:25: note: declared here
[[deprecated]] void A(string s) {
^
main.cpp:21:21: warning: 'void A(std::__cxx11::string, int)' is deprecated [-Wdeprecated-declarations]
A("Hello",42);
^
main.cpp:13:25: note: declared here
[[deprecated]] void A(string s, int i) {
^
main.cpp:21:21: warning: 'void A(std::__cxx11::string, int)' is deprecated [-Wdeprecated-declarations]
A("Hello",42);
^
main.cpp:13:25: note: declared here
[[deprecated]] void A(string s, int i) {
^
См. онлайн-пример , скомпилированный с g ++.
Вы можете даже украсить это сообщением для ваших коллег, поддерживающих кодовую базу:
[[deprecated("Get rid of these performance killing calls."
" Use A(A::getPrecomputedHash(s)) instead.")]]
void A(string s) {
}