Kiedy skompilowałem następujący program: g++ -O2 -s -static 2.cpp
dało mi ostrzeżenie ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
.
Ale po usunięciu -02
z instrukcji copiling nie jest wyświetlane ostrzeżenie.ignorowanie zwracanej wartości 'int scanf (const char *, ...)', zadeklarowanej z atrybutem warn_unused_result [-Wunused-result]?
Moja 2.cpp
Program:
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
return 0;
}
Jakie jest znaczenie tego ostrzeżenia oraz jakie jest znaczenie -O2
??
tak jak usunąć to ostrzeżenie, ponieważ do tej pory wszystkie programy napisane przez C nigdy nie sprawdzałem wartości zwracanej przez scanf !!! Co to za parametr optymalizacji, możesz rzucić trochę światła? –
@perh Czy to dobry powód? – Antonio
Cóż, nie sprawdzanie oznacza, że program zwróci błędną wartość, jeśli którakolwiek ze zmiennych nie jest ustawiona przez sscanf (używając niezainicjowanych wartości). To tylko ostrzeżenie, a nie błąd. Co do tego, że nie jest pokazywany, gdy nie używa (przynajmniej) -O z powodu braku analiz przeprowadzanych przez kompilator - tak to właśnie jest. – perh