代码之家  ›  专栏  ›  技术社区  ›  Srikanth

有什么工具可以在C代码中捕捉愚蠢的错误吗?

  •  11
  • Srikanth  · 技术社区  · 17 年前

    我犯了一个严重的打字错误,浪费了我和同事的时间,就像这样:

    for (i = 0; i < blah; i++); // <- I had a semi-colon here, that's the bug!
    {
      // Some awesome logic here
    }
    

    首先,这很尴尬,第二件事,我不应该重复这个。我对C语言比较陌生,我想我可以使用。 FindBugs 要捕获这样的错误,我应该为C代码使用什么工具?皮棉?

    11 回复  |  直到 15 年前
        1
  •  15
  •   arul    17 年前

    对, PC-Lint 可能是最好的工具。

        2
  •  7
  •   Community Mohan Dere    9 年前

    除了 Lykathea's PC-Lint suggestion 如果提高编译器的警告级别,也可以获得更好(或至少更多)的诊断。有点像 /W4 -Wall

    尽管我不确定您的特定问题是否会与此有关(即使启用了所有警告,MS VC似乎也不会标记它)。我想那是因为它不是一个不寻常的习语 for 当作为循环控制表达式的副作用完成工作时,循环为空。

        3
  •  4
  •   mstrobl    17 年前

    一些过去救过我的东西,从我的头顶上:

    • 使用如果 (3==bla)而不是(bla==3) ,因为如果您拼写错误并键入(3=bla),编译器将投诉。

    • 使用 所有警告 开关。编译器应该警告您这样的空语句。

    • 使用 断言 当你可以和程序防御。努力使你的计划早日失败,你就会看到这样的弱点。

    • 不要试图规避编译器或操作系统已经设置的任何保护措施。它们也是为了您的编程方便而存在的。

        4
  •  4
  •   arsenm    15 年前
        5
  •  3
  •   Thomas Owens    17 年前

    我首先要学习 splint gdb . 如果您需要更高级的工具,请在这两个工具的基础上进行构建。但这是一个良好的开端。

        6
  •  2
  •   Andy Lester    17 年前

    GCC具有Lint通过 warning flags .

        7
  •  0
  •   Richard T    17 年前

    任何像Eclipse这样好的GUI编程环境(“IDE”-集成开发环境)在这种情况下都会生成一个警告。

        8
  •  0
  •   wnoise    17 年前

    良好的语法高亮显示将使类似这样的情况更加明显。

        9
  •  0
  •   Kortuk    16 年前

    我建议你看看你是否有能力 enforce MISRA standards . 它们是用伟大的思想和许多简单的规则编写的,以便编译器检查。例如,我使用的规则要求所有nop命令都有自己的行。这意味着当您在循环语句的末尾放置;时,它将通过一个错误来表示它不在自己的行上。

        10
  •  0
  •   Jace Browning    15 年前

    QA·C 通过编程研究是另一个很好的C静态分析工具。

        11
  •  -1
  •   gimel    17 年前

    在这个(旧)版本的 How to Shoot Yourself In the Foot 在网络上的许多其他版本中, C 总是允许最简单的过程的语言。在编程时 C 你必须记住这一点并小心。如果需要保护,请选择其他语言。

    这句话是 attributed 给Bjarne Stroustrup(C++)自己。(MIS)报价:

    “C让你很容易射到自己的脚上”

    推荐文章