A veces veo codificadores que usan NULL
como valor de retorno de programas main()
C y C ++, por ejemplo, algo así:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
Cuando compilo este `código con gcc me sale la advertencia de:
advertencia: return hace entero desde el puntero sin conversión [-Wint-conversion]
lo cual es razonable porque la macro NULL
se expandirá (void*) 0
y el valor de retorno de main será de tipo int
.
Cuando hago un breve programa en C ++ de:
#include <iostream>
using namespace std;
int main()
{
cout << "HelloWorld!";
return NULL;
}
Y compilarlo con g ++, recibo una advertencia equivalente:
advertencia: conversión al tipo 'int' sin puntero desde NULL [-Wconversion-null]
Pero, ¿por qué usan NULL
como valor de retorno de main()
cuando arroja una advertencia? ¿Es solo un mal estilo de codificación?
- ¿Cuál es la razón para usar en
NULL
lugar de0
como valor de retorno amain()
pesar de la advertencia? - ¿Está definida por la implementación si esto es apropiado o no? De ser así, ¿por qué alguna implementación querría recuperar un valor de puntero?
EXIT_FAILURE
es 8, y parece que usar 1 no es bueno para un fracaso, ya que a veces se usa como un éxito en algunos programas.NULL
puntero como0
(sin una conversión avoid *
). En este caso, la falla pasa desapercibida y no genera una advertencia. Todavía no es para lo que debería usarse NULL.