我想摆脱对不安全函数的所有使用,例如 sprintf
等等在大型 C++ 项目中。
我想要 errors or at least warnings
,这会向我显示所有事件以供进一步审查。
我知道,在 OpenBSD 上有这样的警告,但我在 Linux 上。如果我尝试为 sprintf
定义一个宏我在 <cstdio>
中收到错误 header 。那么,除了修补系统 header 外,还有什么好主意吗?
编辑: 另一个挑战是,在本地开发的 C++ 字符串类中有一个 sprintf 函数。因此,仅 grepping sprintf 会导致大量误报。
最佳答案
尽管我完全同意 @Matt功能还不错,而且你封禁的很随意,这里有办法。
今天是修补标题的日子:
- 复制您的 header ,然后运行 grep 以查找您担心的那些函数。
- 向它们添加
__attribute__ ((deprecated))
。 - 重新编译您的项目。
- 利润???
不修补 header ?
不过,直接使用可能会更好:只需 grep 您自己的项目文件。
您甚至可以将该搜索保存为重新申请的脚本。使用预处理器(注意,我们正在更改保留标识符,这很糟糕!):
像这样添加文件“explosive_security.h”:
inline static int my_deprecated() __attribute__ ((deprecated)) {return 0;} #undef strcmp #define strcmp (my_deprecated(), strcmp)
并在所有其他包含之后包含它。
在大多数情况下,这应该会生成警告并且不会出现错误,但在某些情况下总是会出现错误。
关于c++ - 如何摆脱不安全的功能(sprintf,...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24447418/