Ich sehe manchmal Codierer, die NULLals Rückgabewert von main()in C- und C ++ - Programmen verwendet werden, zum Beispiel so etwas:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
Wenn ich diesen Code mit gcc kompiliere, erhalte ich die Warnung:
Warnung: return macht eine Ganzzahl vom Zeiger ohne Umwandlung [-Wint-Konvertierung]
Dies ist sinnvoll, da das Makro NULLerweitert werden soll (void*) 0und der Rückgabewert von main vom Typ sein soll int.
Wenn ich ein kurzes C ++ - Programm mache aus:
#include <iostream>
using namespace std;
int main()
{
cout << "HelloWorld!";
return NULL;
}
Und kompiliere es mit g ++, ich bekomme eine gleichwertige Warnung:
Warnung: Konvertierung von NULL in den Nicht-Zeigertyp 'int' [-Wconversion-null]
Aber warum verwenden sie NULLals Rückgabewert, main()wenn eine Warnung ausgegeben wird? Ist es nur ein schlechter Codierungsstil?
- Was ist der Grund, trotz der Warnung
NULLanstelle des0Rückgabewerts zu verwendenmain()? - Ist die Implementierung definiert, ob dies angemessen ist oder nicht, und wenn ja, warum sollte eine Implementierung einen Zeigerwert zurückerhalten wollen?
EXIT_FAILUREist 8, und es scheint, dass die Verwendung von 1 nicht gut für einen Fehler ist, da es manchmal in einigen Programmen als Erfolg verwendet wird.
NULLZeiger als 0(ohne Umwandlung in void *) zu definieren . In diesem Fall bleibt der Fehler unbemerkt und generiert keine Warnung. Es ist immer noch nicht das, wofür NULL verwendet werden sollte.