Je vois parfois des codeurs qui utilisent NULL
comme valeur de retour main()
dans les programmes C et C ++, par exemple quelque chose comme ça:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
Quand je compile ce `code avec gcc, je reçois l'avertissement de:
avertissement: return rend entier à partir d'un pointeur sans transtypage [-Wint-conversion]
ce qui est raisonnable car la macro NULL
doit être étendue à (void*) 0
et la valeur de retour de main doit être de type int
.
Quand je fais un petit programme C ++ de:
#include <iostream>
using namespace std;
int main()
{
cout << "HelloWorld!";
return NULL;
}
Et compilez-le avec g ++, j'obtiens un avertissement équivalent:
avertissement: conversion en type non-pointeur 'int' de NULL [-Wconversion-null]
Mais pourquoi utilisent-ils NULL
comme valeur de retour main()
quand il lance un avertissement? Est-ce juste un mauvais style de codage?
- Quelle est la raison d'utiliser
NULL
au lieu de0
comme valeur de retourmain()
malgré l'avertissement? - Est-il défini par l'implémentation si cela est approprié ou non et si oui, pourquoi une implémentation voudrait-elle récupérer une valeur de pointeur?
EXIT_FAILURE
est 8, et il semble que l'utilisation de 1 n'est pas bonne pour un échec car elle est parfois utilisée comme succès dans certains programmes.
NULL
pointeur comme 0
(sans transtypage en void *
). Dans ce cas, la faille passe inaperçue et ne génère pas d'avertissement. Ce n'est toujours pas la raison pour laquelle NULL doit être utilisé.