exa*_*ple 26 c++ runtime-error
我很清楚,可能不会有"c ++中最难找到的错误",但我仍然对其他人可能已经/可能已经遇到的内容感兴趣.
这个问题的想法是在与朋友讨论时产生的.我们同意,通过在您提交的源代码中包含错误来破坏cpp项目必须相当简单......但我们能想到的最好的事情是使用未初始化的变量(在运行时导致随机分段错误) .我相信有更好的方法......?!
想要错误代码的特征:
尽管如此,虽然它必须引人注目,但在代码提交后不应该显而易见......好吧,你明白了.
别担心,我们的考虑纯粹是理论上的(我们不打算破坏任何项目).我们只是认为这是一个很好的思想实验与他人分享:-)
简而言之:
什么是破坏源代码的最微妙的方法,可能会在差异提交(如git)中被忽视,但最终会阻止软件的发布?
Mat*_*lia 15
经典:
#define if while
#define else
Run Code Online (Sandbox Code Playgroud)
埋在一些标题中.
干扰@ WhozCraig的评论,同时:
#define true (!!(__LINE__ % 10))
Run Code Online (Sandbox Code Playgroud)
一旦每十行true不会如此true,但编译程序的行为将保持一致......当源中的某些内容发生变化时,莫名其妙地改变.
沿着这条线:
#define for if(__LINE__ % 10) for
#define NULL (!(__LINE__ % 10))
Run Code Online (Sandbox Code Playgroud)
或者说:
#define virtual
Run Code Online (Sandbox Code Playgroud)
这将导致严重的问题 - 但仅在使用动态调度时,这可能使其检测更成问题.
以类似的方式:
#define dynamic_cast static_cast
Run Code Online (Sandbox Code Playgroud)
// Fail early, fail often
#define throw std::abort();
Run Code Online (Sandbox Code Playgroud)
per*_*eal 15
不太明显:
if (foo =! foobar)
Run Code Online (Sandbox Code Playgroud)
我们可以添加一个技巧来摆脱编译器警告:
if ( (i =! 3) && (j==1))
Run Code Online (Sandbox Code Playgroud)
我想说,到目前为止,对我来说最令人沮丧的事情是使用=而不是==. 例如:
while(foo = bar) {}
Run Code Online (Sandbox Code Playgroud)
代替
while(foo == bar) {}
Run Code Online (Sandbox Code Playgroud)
从本质上讲,任何导致代码无法正常运行而不是崩溃的事情都会让我头撞墙。
荣誉奖:
- + / *=与vs类似==,误认为&是&&或|for ||。vector<bool>(如果你们都喜欢“什么?”,请阅读此处)