忽略'int scanf(const char*,...)'的返回值,用属性warn_unused_result [-Wunused-result]声明?

sas*_*ami 5 g++

当我编译以下程序时: 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

per*_*erh 9

这意味着您不检查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)