web-dev-qa-db-fra.com

Pourquoi renvoyer NULL depuis main ()?

Je vois parfois des codeurs qui utilisent NULL comme valeur de retour de 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 du pointeur sans conversion [-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 court 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" à partir de NULL [-Wconversion-null]

Mais pourquoi utilisent-ils NULL comme valeur de retour de main() quand il lance un avertissement? Est-ce juste un mauvais style de codage?


  • Quelle est la raison d'utiliser NULL au lieu de 0 Comme valeur de retour de main() 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?

Est-ce juste un mauvais style de codage?

Pire. La bonne façon d'indiquer que le programme s'est terminé correctement est

#include <stdlib.h>

int main (void)
{
    return EXIT_SUCCESS;
}
2

Dans? Certains/beaucoup/tous? Implémentations C++ NULL est une macro étendue à 0.

Ceci, une fois étendu, donne return 0. Qui est une valeur de retour valide.

Est-ce juste un mauvais style de codage?

Oui.

1
Robert Andrzejuk