Ich sehe manchmal Codierer, die NULL
als 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 NULL
erweitert werden soll (void*) 0
und 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 NULL
als Rückgabewert, main()
wenn eine Warnung ausgegeben wird? Ist es nur ein schlechter Codierungsstil?
- Was ist der Grund, trotz der Warnung
NULL
anstelle des0
Rü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_FAILURE
ist 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.
NULL
Zeiger 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.