当我编译以下程序时:
g++ -O2 -s -static 2.cpp
它给了我警告ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
但是,当我从复制语句中删除-02
时,不会显示任何警告。
我的2.cpp
计划:
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
return 0;
}
这个警告的含义是什么?-O2
??
答案 0 :(得分:9)
这意味着您不检查scanf的返回值。
它可能很好地返回1(仅设置一个)或0(既不设置也不设置b)。
在没有优化的情况下编译时未显示的原因是,除非启用优化,否则无法进行分析。 -O2启用优化 - http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html。
如果没有收到两个数字,只需检查返回值就会删除警告并使程序以可预测的方式运行:
if( scanf( "%d%d", &a, &b ) != 2 )
{
// do something, like..
fprintf( stderr, "Expected at least two numbers as input\n");
exit(1);
}
答案 1 :(得分:0)
我通过制作一个与参数数量匹配的if语句来处理警告:
{{1}}