温故而知新 Blog by ssj233
关于C/C++的Warning
2022-08-22 / 2 min read

如何发现更多Warning🙃

在编译时加上命令-Wall-Wextra
g++ a.cpp -o a.out -Wall -Wextra
Warning是极为有用的,可以提醒你一些意想不到的问题

关于Warning和error

operation on ‘i’ may be undefined

i的操作并没有被定义(执行)
这种情况常出现于复合语句内,个人认为属于编译器的问题

a[i++]=x;
//改为下面的版本即可避免Warning
a[i]=x;
i++;
//复合语句还是少用点好,

但有的时候,写在for里的复合语句的执行顺序可能不是你希望的
在有一题中,我WA0的原因就是因为复合语句

for (i = 1, x[++n] = A - a[n - 1]; i < n; i++) x[i] = a[i] - a[i - 1];
//但它的执行顺序并没有如我所想

n++;
for (i = 1, x[n] = A - a[n - 1]; i < n; i++) x[i] = a[i] - a[i - 1];
//相比之下,改成这样却能AC

value computed is not used

这个值没有被使用
在有逗号出现的地方Warning较多

s = x[1], y[1];
//注意,这里y[1]虽然在表达式中
//但它的值却并没有对表达式的值(变量s)的值有影响

//请确认是否把其它运算符号写成了逗号
s=x[1]+y[1];

‘gets’ was not declared in this scope

the `gets' function is dangerous and should not be used.

关于gets,它已经死了

对于CPP玩家,可以转用getline
使用:getline(cin,一个string类)