A volte vedo programmatori che usano NULLcome valore di ritorno main()nei programmi C e C ++, ad esempio qualcosa del genere:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
Quando compilo questo codice con gcc ricevo l'avvertimento di:
avvertenza: return rende intero dal puntatore senza cast [-Wint-conversion]
che è ragionevole perché la macro NULLdeve essere espansa (void*) 0e il valore di ritorno di main deve essere di tipo int.
Quando realizzo un breve programma C ++ di:
#include <iostream>
using namespace std;
int main()
{
cout << "HelloWorld!";
return NULL;
}
E compilarlo con g ++, ricevo un avviso equivalente:
avvertenza: conversione in tipo non puntatore 'int' da NULL [-Wconversion-null]
Ma perché usano NULLcome valore di ritorno main()quando emette un avviso? È solo un cattivo stile di codifica?
- Qual è il motivo da utilizzare
NULLanziché0come valore di ritornomain()nonostante l'avviso? - È definito dall'implementazione se questo è appropriato o meno e, in caso affermativo, perché qualsiasi implementazione dovrebbe voler recuperare un valore puntatore?
EXIT_FAILUREè 8, e sembra che usare 1 non sia un errore, dato che a volte è usato come successo in alcuni programmi.
NULLpuntatore come 0(senza cast a void *). In questo caso, il difetto passa inosservato e non genera un avviso. Non è ancora quello per cui NULL dovrebbe essere usato.