你失去了你本该拥有的一切,你又得到了什么,虚无缥缈的教训吗?|

Piggy343288

园龄:1年6个月粉丝:5关注:0

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: thisfor’ 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 ‘forfor (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 中国大陆许可协议进行许可。

posted @   Piggy343288  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起