我有一个使用大量不安全功能的大型代码库,例如gmtime
和strtok
。我不想尝试搜索代码库并替换这些代码库,而是让编译器在看到它们时发出警告或错误(向维护开发人员强调问题)。这可能与海湾合作委员会有关吗?
我已经知道__attribute__((deprecated))
,但AFAIK我无法使用它,因为我无法控制声明这些函数的头文件。
答案 0 :(得分:12)
创建自定义标头deprecated.h
。在那里,创建自己的包装函数deprecated_strtok()
等,只调用strtok
。标记__attribute__((deprecated))
的人。在这些定义之下,#define strtok deprecated_strtok
。最后,使用-include deprecated.h
答案 1 :(得分:7)
在源文件中尝试这个,最近有一个gcc,它应该避免开发人员使用这两个函数。
#pragma GCC poison gmtime
#pragma GCC poison strtok
它的缺点是它只对一个编译单元有效。如果您使用预编译的标题(如果您的项目很大,那肯定会这样做),您可以将它们放在那里。至少这个解决方案不涉及在系统头文件中修饰函数声明并在编译时工作。
毒药可能有点困难,因为它会产生错误而不是警告。有谁知道如何削弱它?至少它是一种强制执行DO NOT USE FUNCTION xxx策略的好方法。