【问题标题】:What's the best way to check if C code has deprecated POSIX calls?检查 C 代码是否已弃用 POSIX 调用的最佳方法是什么?
【发布时间】:2009-07-24 06:57:07
【问题描述】:

我一直在编写一些较旧的 C 代码。我发现有相当多的 POSIX 调用现在已经过时,并在手册页中标记为 deprecated

检查代码中是否仍有已弃用的 POSIX 调用的最佳方法是什么?我正在考虑:

  • 特殊的 gcc 警告 选项。
  • 某种 lint 工具检测这些调用。

【问题讨论】:

    标签: c linux gcc unix


    【解决方案1】:

    Lint 可以找到已弃用的东西(-deprecated 标志)。

    Coverity 在 c 和 c++ 代码库中经常发现此类问题。

    此外,也许更重要的是,静态分析工具可以发现更广泛的问题和错误。

    你永远不会有太多的静态代码分析。使用多种工具是有好处的。

    【讨论】:

      【解决方案2】:

      我的第一次尝试是使用grep 的简单工具(尽管它可能会引发误报)。

      >> cd src_dir
      
      >> cat deprecated_calls
      printf
      strcpy
      
      >> for i in $(cat deprecated_calls) ; do
      +>     grep -R $i .
      +> done
      binmath.c:printf ("   0 sum:[%s]\n",sum);
      binmath.c:printf (" 100 sum:[%s]\n",sum);
      binmath.c:printf (" 200 sum:[%s]\n",sum);
      binmath.c:printf (" 300 sum:[%s]\n",sum);
      qq.c:printf("%d %d %d\n",i,j,k);
      xx.c:        fprintf (stderr, "Cannot open 'words.txt', error = %d\n", errno);
      binmath.c:strcpy (buff, "0");
      oldstuff/qq.c:printf("%d %d %d\n",i,j,k);
      

      我怀疑您是否需要一个成熟的解析器类型的工具。

      【讨论】:

      • 我们可以在这里推荐 ack 吗?如果 OP 可以访问 Perl,则 ack 将挽救生命。
      • 如果我们假设没有任何东西可以做到这一点,那就太好了。但是我们如何获得所有 POSIX 弃用调用的文本文件呢?
      • @Chris Lutz : 我不熟悉 ack,从哪里获得它或它的作用。
      • 但这可能是用手提钻砸苍蝇 :-)
      猜你喜欢
      • 2021-02-12
      • 2014-08-29
      • 2015-03-31
      • 2014-01-05
      • 2020-09-16
      • 2013-02-21
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      相关资源
      最近更新 更多