当我编译以下程序时:
g++ -O2 -s -static 2.cpp它给了我警告ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result].
但是当我-02从copiling语句中删除时,没有显示警告.
我的2.cpp节目:
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个警告的含义是什么,含义是什么-O2?
这意味着您不检查scanf的返回值.
它可能很好地返回1(仅设置一个)或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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14603 次 |
| 最近记录: |