c++ - 如何摆脱不安全的功能(sprintf,...)

标签 c++ c gcc g++

我想摆脱对不安全函数的所有使用,例如 sprintf等等在大型 C++ 项目中。 我想要 errors or at least warnings ,这会向我显示所有事件以供进一步审查。 我知道,在 OpenBSD 上有这样的警告,但我在 Linux 上。如果我尝试为 sprintf 定义一个宏我在 <cstdio> 中收到错误 header 。那么,除了修补系统 header 外,还有什么好主意吗?

编辑: 另一个挑战是,在本地开发的 C++ 字符串类中有一个 sprintf 函数。因此,仅 grepping sprintf 会导致大量误报。

最佳答案

尽管我完全同意 @Matt功能还不错,而且你封禁的很随意,这里有办法。

  1. 今天是修补标题的日子:

    1. 复制您的 header ,然后运行 ​​grep 以查找您担心的那些函数。
    2. 向它们添加 __attribute__ ((deprecated))
    3. 重新编译您的项目。
    4. 利润???
  2. 不修补 header ?

    不过,直接使用可能会更好:只需 grep 您自己的项目文件。
    您甚至可以将该搜索保存为重新申请的脚本。

  3. 使用预处理器(注意,我们正在更改保留标识符,这很糟糕!):

    像这样添加文件“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/

相关文章:

ruby-on-rails - 警告被视为 rails 中的错误

c - 访问 zip 文件

linux - Gcc 为 c6x 编译 hello.c

ios - 原子读/写 int 值 w/o 对 int 值本身的额外操作

c++ - 段错误后会发生什么?

c++ - 从网站下载文件的库?

printf 中的 C 段错误 - dl-lookup.c

c++ - 如何使用 glm_gtx_spline::catmullRom 生成样条曲线?

c++ - 非STL哈希表类型结构

c# - 你能在 C# 中包含 C++ 片段吗?