我很清楚,可能不会出现“c++ 中最难发现的错误”,但我仍然对其他人能想到/可能已经遇到过的事情感兴趣。
这个问题的想法是在与朋友讨论时产生的。我们同意,通过故意在您提交的源代码中包含错误来破坏 cpp 项目一定相当简单......但是我们能想到的最好的办法是使用未初始化的变量(导致运行时随机分段错误) 。我确信有更好的方法......?!
错误代码的想要的特征:
- 第一眼看上去必须是有效的代码
- 不得阻止代码编译(太明显)
- 如果可能的话,错误应该看起来像是一个错误(如果被发现的话)
- 错误必须严重到足以阻止软件发布(例如随机段错误、代码逻辑故障等)
尽管如此,虽然它必须是引人注目的,但在提交代码后它不应该是显而易见的......好吧,你明白了。
别担心,我们的考虑纯粹是理论上的(我们不打算破坏任何项目)。我们只是认为这是一个足够好的思想实验,可以与其他人分享:-)
简而言之:
破坏源代码的最微妙的方法是什么?这些方法可能在差异提交(如 git)中被忽视,但最终会阻止软件的发布?
Classic:
#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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)