Às vezes, vejo codificadores que usam NULL
como valor de retorno main()
nos programas C e C ++, por exemplo, algo assim:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
Ao compilar esse código com o gcc, recebo o aviso de:
aviso: return torna inteiro do ponteiro sem conversão [-Wint-conversion]
o que é razoável porque a macro NULL
deve ser expandida (void*) 0
e o valor de retorno de main deve ser do tipo int
.
Quando eu faço um pequeno programa C ++ de:
#include <iostream>
using namespace std;
int main()
{
cout << "HelloWorld!";
return NULL;
}
E compilá-lo com g ++, recebo um aviso equivalente:
aviso: convertendo para o tipo não-ponteiro 'int' de NULL [-Wconversion-null]
Mas por que eles usam NULL
como valor de retorno main()
quando lança um aviso? É apenas um estilo de codificação ruim?
- Qual é o motivo para usar em
NULL
vez de0
como valor de retorno,main()
apesar do aviso? - É definido pela implementação se isso é apropriado ou não e, em caso afirmativo, por que alguma implementação desejaria obter um valor de ponteiro de volta?
EXIT_FAILURE
é 8, e parece que usar 1 não é bom para uma falha, já que às vezes é usado como sucesso em alguns programas.
NULL
ponteiro como 0
(sem uma conversão para void *
). Nesse caso, a falha passa despercebida e não gera um aviso. Ainda não é para isso que NULL deve ser usado.