我有一个很大的代码库,想找到对特定标准或第三方库函数的调用。如果函数的名称不是很独特,并且还可以作为变量名称和内部注释出现,则很难使用文本搜索来实现。如果库函数被重载,则会出现额外的复杂情况,并且必须找到许多重载中的一个。最好不要修改库。
我发现的一种方法是删除感兴趣的函数,这将导致在调用它的每个地方都出现编译错误(并且在没有此类调用的情况下不会出现错误)。例如,如果要查找所有调用sqrt(float)
但全部跳过sqrt(double)
,则解决方案如下:
#include <cmath>
struct A {
friend float sqrt(float) noexcept = delete;
};
int main() {
sqrt( 1.0 ); // no error for double argument
sqrt( 1.0f ); // 'deleted function call' error in Clang and MSVC
}
该解决方案实际上是基于删除已声明函数的非标准能力。它适用于 Clang 和 MSVC,但不适用于 GCC。演示:https ://gcc.godbolt.org/z/9h3jGMjWc
是否有实现相同目标的标准方法?