Scanf声明

#include  #include  

您好,我想知道为什么这个程序不执行。 好像我一直无法正常执行scanffunction。 我得到的错误是:

error:忽略使用属性warn_unused_result声明的scanf的返回值

注意:我知道有一种更有效的方法来编写我当前的程序,但这是不重要的。 我想知道这个错误意味着什么,以及为什么我一直得到它并可能是一个解决方案。 感谢你们。 这是代码:

 int main (int argc, char *argv[]){ int x; int y; int z; int temp; scanf("%d", &x); scanf("%d", &y); scanf("%d", &z); if (x > y) { temp = x; x = y; y = temp; } if (y > z) { temp = y; y = z; z = temp; } if (x > z) { temp = x; x = z; z = temp; } printf("%d", x); printf("%d", y); printf("%d", z); return EXIT_SUCCESS; } 

您从编译器获得的错误就是它所说的。 为了使您的应用程序正确,您必须检查scanf的返回值。 手册页中描述了可能的返回值。

有关导致错误的原因的解释,请参阅gcc手册的“warn_unused_result”部分(引自Peter Rs的回复)。

从海湾合作委员会文件:

如果具有此属性的函数的调用者不使用其返回值,则warn_unused_result属性会导致发出警告。 这对于不检查结果是安全问题还是总是错误的函数(例如realloc )非常有用。

  int fn () __attribute__ ((warn_unused_result)); int foo () { if (fn () < 0) return -1; fn (); return 0; } 

导致第5行发出警告。