Às vezes, vejo codificadores que usam NULLcomo 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 NULLdeve ser expandida (void*) 0e 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 NULLcomo valor de retorno main()quando lança um aviso? É apenas um estilo de codificação ruim?
- Qual é o motivo para usar em
NULLvez de0como 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.
NULLponteiro 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.