如何让我的编译器更愚蠢(索引错误)
How to let my compiler more stupid (wrong index)?
我遇到了一个可怕的情况。我通常使用可视化代码来编辑我的代码,也在其中编译和执行(F5)。但我发现vscode太聪明了,或者忽略了一些警告信息输出正确的答案,这在Ideone中也很有效但在windows cmd或dev C++中,我的代码无法输出任何内容,只能返回一个大数字
我发现一些情况会发生我上面提到的事情。
像这个的代码
for (i = 0; i < g.size(); i++)
{
int source;
int dest;
int minWeight = 999;
for (j = 0; i < g[j].size(); j++)
{
// no edge, come to next condition
if (!g[i][j])
continue;
if (g[i][j] < minWeight)
{
source = i;
dest = j;
minWeight = g[i][j];
}
}
if
updateGroup(index, index[source], index[dest]);
else
updateGroup(index, index[source], index[dest]);
}
您可能会发现第二个for循环有错误的条件语句,它应该更改j = 0; i < g[j].size(); j++
至j = 0; j < g[i].size(); j++
所以我想知道
有没有办法让我的vscode更严格?
为什么它仍然可以在vscode和ideone中输出正确答案?
当出现这种无消息错误时,如何避免或更容易找到我的代码错误的地方?
真的希望有人能帮助我,并感谢你的所有建议!!
编译器或计算机无法读懂你的想法,猜测你想写什么,而不是你真正的意思。
即使这个错误导致了一个bug,它也不知道你不是有意写这个,或者你打算写其他特定的东西。
即使这个错误导致你的程序有未定义的行为,也不可能检测到许多未定义行为的情况,编译器作者也不值得尝试编写代码来做到这一点,因为这太难了,也不够有用。即使他们这样做了,编译器仍然猜不出你的意思。
记住,像这样的循环不需要来检查或增加您在序言中声明的相同变量;这只是一种常见的模式(现在被更安全的声明范围所取代)。循环递增i
但检查j
本身并没有什么问题。
最终,这个问题的解决方案是为您的代码编写测试,这就是为什么许多组织都有专门的质量保证团队来搜索错误,以及为什么在将代码提交到项目之前,您应该已经对其进行测试。
记住要集中注意力,仔细阅读你的代码,这样的拼写错误最终会在你的工作中变得不那么常见。当然,偶尔你会写一个bug,你的测试会发现它。有时你的测试不会发现它,这时你的客户最终会注意到它并提出投诉。然后,您发布了一个新版本来修复这个错误。
这完全是正常的软件开发实践。这就是它的乐趣所在!
1)尽可能高地启动编译器警告。
2) 使用多个不同的编译器(它们都警告不同的事情)。
3) 很好地了解语言的细节(需要多年的努力),并且对编写的代码要非常非常小心。
4) 编写(并定期运行)大量测试。
5) 使用诸如消毒器、模糊器、linters、静态代码分析器等工具来帮助捕捉错误。
6) 在多个平台上构建和运行代码,以保持其可移植性,并发现不同环境/实现暴露的错误。
- 数组索引重载错误
- SIGSEGV, 分段错误. 而 printf() 数组索引的值
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 如何摆脱导入的 make 项目中的 Eclipse 索引器"Type std::... could not be resolved"错误
- 访问特定阵列位置/索引时出现分段错误
- 使用无序映射进行错误索引
- 当我在网格/面中实现索引时,为什么它会返回OpenGl错误
- R 包安装错误:重新定位 0 具有无效的符号索引 11
- 索引 2D 向量时'Reference to type const..'编译错误
- 片段着色器中的"错误:在 GLSL 1.30 及更高版本中禁止使用非常量表达式索引的采样器数组"
- 运行时错误:基0x000000000000溢出到0xffffffffffffffff的指针索引表达式 (basic_st
- 如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果
- 队列验证层错误:队列族索引在 pCreateInfo->pQueueCreateInfos 数组中不是唯一的
- 向量下标出的范围错误.即使向量的索引大于访问数据的索引,也会发生误差
- G 4.8.5带负数组索引的循环优化错误
- 分段错误发生在索引离开C++数组边界之后
- 有没有一种简单的方法可以忽略 c++ 中的索引错误
- 如何让我的编译器更愚蠢(索引错误)
- C++ - 通过提升进行反向替换 - 错误的索引错误
- C++2d数组索引错误