Czasami widzę kodery, które wykorzystują NULL
jako wartość zwracaną main()
w programach C i C ++, na przykład coś takiego:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
Kiedy kompiluję ten `kod z gcc, pojawia się ostrzeżenie:
ostrzeżenie: return tworzy liczbę całkowitą ze wskaźnika bez rzutowania [-Wint-konwersji]
co jest uzasadnione, ponieważ makro NULL
należy rozszerzyć do, (void*) 0
a wartość zwracana dla main powinna być typu int
.
Kiedy tworzę krótki program w C ++:
#include <iostream>
using namespace std;
int main()
{
cout << "HelloWorld!";
return NULL;
}
I skompiluj to z g ++, dostaję równoważne ostrzeżenie:
ostrzeżenie: konwersja na typ nieinterpretacyjny „int” z NULL [-Wconversion-null]
Ale dlaczego używają NULL
jako wartości zwracanej, main()
gdy wyświetla ostrzeżenie? Czy to po prostu zły styl kodowania?
- Jaki jest powód, aby użyć
NULL
zamiast0
wartości zwracanejmain()
pomimo ostrzeżenia? - Czy jest to zdefiniowane jako implementacja, czy jest to właściwe, czy nie, a jeśli tak, to dlaczego implementacja miałaby chcieć odzyskać wartość wskaźnika?
EXIT_FAILURE
ma 8, i wydaje się, że użycie 1 nie jest dobre na niepowodzenie, ponieważ czasami jest używane jako sukces w niektórych programach.
NULL
wskaźnika jako 0
(bez rzutowania na void *
). W takim przypadku wada pozostaje niezauważona i nie generuje ostrzeżenia. Nadal nie jest to, do czego NULL powinien być używany.