gpt4 book ai didi

c++ - 如何发现未定义的行为

转载 作者:IT老高 更新时间:2023-10-28 23:10:43 25 4
gpt4 key购买 nike

有什么方法可以知道你的程序在 C++(甚至 C)中是否有未定义的行为,而不是记住整个规范?

我问的原因是我注意到很多程序案例working in debug but not release由于未定义的行为。如果有一个工具至少可以帮助发现 UB,那就太好了,这样我们就知道存在问题的可能性。

最佳答案

良好的编码标准。保护你免受自己的伤害。以下是一些想法:

  1. 代码必须在最高警告级别编译...没有警告。 (换句话说,当设置为最高级别时,您的代码绝对不能触发 任何 警告。)为所有项目打开错误警告标志。

    当您使用其他人的库时,这确实意味着一些额外的工作,因为他们可能没有这样做。您还会发现有些警告毫无意义……根据您的团队决定单独关闭这些警告。

  2. 总是使用RAII .

  3. 永远不要使用 C 风格转换!永远不要! - 我认为有一些罕见的情况是你必须打破它,但你可能永远找不到它们。

  4. 如果您必须 reinterpret_cast 或强制转换为 void,那么请使用包装器来确保始终转换为/从同一类型转换。换句话说,将您的指针/对象包装在 boost::any 中,并将指向它的指针转换为您需要的任何内容,另一方面也这样做。为什么?因为您将始终知道 reinterpret_cast 来自什么类型,并且 boost::any 将强制您在此之后强制转换为正确的类型。这是你能得到的最安全的。

  5. 始终 在声明时初始化变量(或在类中的构造函数初始化程序中)。

还有更多,但这些都是非常重要的开始。

没有人能记住标准。我们中级到高级 C++ 程序员所做的是使用我们知道是安全的结构并保护我们自己免受人性的伤害......并且我们不会使用不安全的结构,除非我们必须这样做,然后我们会格外小心以确保危险都包裹在一个很好的安全界面中,经过反复测试。

所有语言通用的一个重要事项是:

make your constructs easy to use correctly and difficult to use incorrectly

关于c++ - 如何发现未定义的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3016077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com