2013-06-24 4 views
5

Als ich folgendes Programm kompiliert habe: g++ -O2 -s -static 2.cpp gab es mir die Warnung ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result].
Aber wenn ich -02 von Copiling-Anweisung entfernen, wird keine Warnung angezeigt.Ignorieren Rückgabewert von 'int scanf (const char *, ...)', deklariert mit Attribut warn_unused_result [-Wunused-Ergebnis]?

Mein 2.cpp Programm:

#include<stdio.h> 
int main() 
{ 
    int a,b; 
    scanf("%d%d",&a,&b); 
    printf("%d\n",a+b); 
    return 0; 
} 


Was ist die Bedeutung dieser Warnung ist und was ist die Bedeutung von -O2 ??

Antwort

7

Es bedeutet, dass Sie den Rückgabewert von scanf nicht überprüfen.

Es kann sehr gut 1 (nur a ist gesetzt) ​​oder 0 (weder a noch b ist gesetzt) ​​zurückgeben.

Der Grund, warum es beim Kompilieren ohne Optimierung nicht angezeigt wird, ist, dass die Analysen, die für die Anzeige erforderlich sind, nicht durchgeführt werden, wenn die Optimierung nicht aktiviert ist. -O2 aktiviert die Optimierungen - http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html.

einfach den Rückgabewert Überprüfung wird die Warnung entfernen und das Programm verhalten sich in einer vorhersagbaren Art und Weise zu machen, wenn es nicht zwei Zahlen erhalten hat:

if(scanf("%d%d", &a, &b) != 2) 
{ 
    // do something, like.. 
    fprintf(stderr, "Expected at least two numbers as input\n"); 
    exit(1); 
} 
+0

also wie entferne ich diese Warnung weil bis zu dem Datum alle C-Programme, die ich geschrieben habe ich nie überprüft den Rückgabewert von scanf !!! Mit welchem ​​Optimierungsparameter können Sie auch Licht erzeugen? –

+0

@perh Ist das ein guter Grund? – Antonio

+0

Nun, keine Überprüfung bedeutet, dass das Programm den falschen Wert zurückgibt, wenn eine der Variablen nicht von der sscanf gesetzt wird (mit nicht initialisierten Werten). Es ist nur eine Warnung, kein Fehler. Wenn es nicht angezeigt wird, wenn (mindestens) -O wegen fehlender Analyse durch den Compiler nicht verwendet wird, ist es genau so. – perh

0

ich der Warnung sorgte eine if-Anweisung, indem sie die Spiele die Anzahl der Argumente:

Verwandte Themen