当我编译如下程序时:g++ -O2 -s -static 2.cpp
它给了我警告ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
.
但是当我删除-02
从复制语句中没有显示警告。
My 2.cpp
程序:
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
return 0;
}
此警告的含义是什么?-O2
??
这意味着您不检查 scanf 的返回值。
它很可能返回 1(仅设置了 a)或 0(a 和 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)