Warning&&Error 原因大全
前传
无论你是否理解编辑器输出的 warning,都要消灭所有的 warning 让你的程序跑的又快又健康!
-Wall
是个好习惯。
1.
example.cpp: In function 'int main()':
example.cpp:152:25: warning: statement has no effect [-Wunused-value]
(int)1 < (unsigned)2;
^
你的语句没有任何意义,可能是赋值语句却没写赋值一类的。如上所示。
2.
example.cpp: In function 'int main()':
example.cpp:4:9: warning: unused variable 'i' [-Wunused-variable]
int i;
^
存在从未用到的变量。考虑代码中是否有某处变量名字写错,导致该用的变量没用到。
3.
example.cpp: In function 'int main()':
example.cpp:5:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i = 0; i < a.size(); i++) {
^
在有符号整数和无符号整数之间的比较很迷惑。在正数时表现良好,但在负数时就会出现一些奇奇怪怪的错误:
#include <bits/stdc++.h>
using namespace std;
int main() {
printf("%d", (signed)-1 < (unsigned)0);
}
stdout: 0
所以你可以强转类型以消除这个 warning。
4.
example.cpp:5:5: error: reference to 'next' is ambiguous
next += 1;
^
因为你的变量名和什么地方冲突了,所以会爆错。常见的变量名如 hash,next,x0,y0,fpos等。
5.
example.cpp:153:23: warning: iteration 100009u invokes undefined behavior [-Waggressive-loop-optimizations]
cout << head[i];
^
example.cpp:152:5: note: containing loop
for (int i = 1; i <= (maxN << 1); i++) {
你预处理越界了!
6.
example.cpp:196:42: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long long int' [-Wformat=]
printf("%d\n", HLD::sum(x, k));
这个是因为你用了 %d
读入一个 long long 所造成的。可以考虑你是不是 #define int long long
以后忘了改。
7.
example.cpp: In function 'int main()':
example.cpp:7:1: error: jump to label 'a' [-fpermissive]
a:;
^
example.cpp:4:10: error: from here [-fpermissive]
goto a;
^
example.cpp:5:9: error: crosses initialization of 'int c'
int c = 0;
^
被扫进历史垃圾堆的 goto。如果你跳过了某个变量的初始化,label 后边还用到了这个变量,你码炸了。所以可以把变量的初始化放在程序最开始。另外,goto 不能跨函数使用。
8.
example.cpp: In function ‘bool check(int)’:
example.cpp:7:1: warning: this ‘for’ clause does not guard... [-Wmisleading-indentation]
for (int i=1; i<=n; i++) for (int j=1; j<=m; j++) vis[i][j] = false; cnt2 = 0;
^~~
example.cpp:7:70: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘for’
for (int i=1; i<=n; i++) for (int j=1; j<=m; j++) vis[i][j] = false; cnt2 = 0;
for 循环的问题。你写的格式似乎是想让两句话一起在循环里执行,实际上却不是,也就是所谓“此 for 语句不能执行这段语句”。
9.
example.cpp: In function 'int solve()':
example.cpp:15:1: warning: no return statement in function returning non-void [-Wreturn-type]
}
^
类似的错误,都是函数的实际返回值和指定的值不匹配造成的。他大多数时候会给你一个默认返回值,但 RE 也是常态。
本文作者:Piggy343288
本文链接:https://www.cnblogs.com/Piggy343288/p/17938053/annoying-warning-and-error
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理