我很清楚,可能不会有“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/