c++ - c++中最难发现的错误

标签 c++ runtime-error

我很清楚,可能不会有“c++ 中最难发现的错误”,但我仍然对其他人能想到/可能已经遇到的问题感兴趣。

这个问题的想法是在与 friend 的讨论中产生的。我们同意,通过在您提交的源代码中故意包含错误来破坏 cpp 项目必须相当简单......但我们能想到的最好的事情是使用未初始化的变量(导致运行时的随机段错误) .我敢肯定还有更好的方法...?!

想要的错误代码特征:

  • 乍一看必须像有效代码
  • 不得停止编译代码(太明显)
  • 如果可能的话,错误应该看起来只是一个错误(应该被发现)
  • 错误必须严重到足以阻止软件发布(例如随机段错误、代码逻辑故障等)

尽管如此,虽然它必须很明显,但在提交代码后不应该很明显......好吧,你明白了。

别担心,我们的考虑纯粹是理论上的(我们不打算破坏任何项目)。我们只是认为这是一个很好的思想实验,可以与他人分享:-)

简而言之:

What is the most subtle way to sabotage sourcecode that might go unnoticed in a differential commit (like git) but will ultimately prevent a release of the software?

最佳答案

经典:

#define if while
#define else

埋在一些标题中。


干扰@WhozCraig 的评论:

#define true (!!(__LINE__ % 10))

每十行一次true不会那么true,但是编译后的程序的行为会保持一致……当源代码发生变化时会莫名其妙地发生变化。

沿着这条线:

#define for if(__LINE__ % 10) for

#define NULL (!(__LINE__ % 10))

或者怎么样:

#define virtual 

这将导致严重的问题 - 但只有在使用动态调度时才会出现,这可能会使检测变得更加困难。


以类似的方式:

#define dynamic_cast static_cast

// Fail early, fail often
#define throw std::abort();

关于c++ - c++中最难发现的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14269459/

相关文章:

c++ - 什么是 libstdc++-libc 以及何时需要它

c++ - 可以使用 memset 来填充一组 std::complex<float> 吗?

c++ - Boost,字符串问题的 posix 时间

python - 没有显示来自 Python 模块的运行时错误的行号

VBA 运行时错误 '1004'

c++ - 加速非阻塞 Unix 套接字 (C++)

c++ - 针对 Boost 库编译 Nuke 插件

vba - 为什么当long变量在允许范围内时会弹出 "Run-time error ' 6': Overflow"?

bash - bash错误陷阱是否保证不会进行递归调用?

php - 处理php时出错