将库函数标记为已弃用/不可用而不修改其源代码

Tom*_*Tom 9 c c++ gcc

我有一个大型代码库,它使用了许多不安全的函数,比如gmtimestrtok.我不想尝试搜索代码库并替换这些代码库,而是让编译器在看到它们时发出警告或错误(向维护开发人员强调问题).这可能与GCC有关吗?

我已经知道了__attribute__((deprecated)),但AFAIK我不能使用它,因为我无法控制声明这些函数的头文件.

MSa*_*ers 12

创建自定义标头deprecated.h.在那里,创建自己的包装函数,deprecated_strtok()只需调用strtok.标记那些__attribute__((deprecated)).低于这些定义,#define strtok deprecated_strtok.最后,使用-include deprecated.h


jde*_*aan 7

在源文件中尝试这个,最近有一个gcc,它应该避免开发人员使用这两个函数.

#pragma GCC poison gmtime
#pragma GCC poison strtok
Run Code Online (Sandbox Code Playgroud)

它的缺点是它只对一个编译单元有效.如果你使用预编译的头文件(如果你的项目很大,你肯定会这样做),你可以把它们放在那里.至少这个解决方案不涉及在系统头中装饰函数声明并在编译时工作.

毒药可能有点困难,因为它产生错误而不是警告.有谁知道如何削弱它?至少它是一种强制执行DO NOT USE FUNCTION xxx策略的好方法.