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

时间:2013-06-24 12:08:22

标签: g++

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

的含义是什么?

2 个答案:

答案 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}}