• [^] # Re: Petites precisions

    Posté par . En réponse au journal J'adore Linus. Évalué à 2.

    > C'est pas vraiment lié au compilateur.

    Si.

    > C'est la librairie C qui """gère""" ça. Si tu ne fais pas "#include
    > <stdlib.h>", tu as une erreur de compilation :
    > NULL : symbol non défini.

    La norme dit que NULL est une macro. Si tu n'include pas stdlib.h, le préprocesseur laisse passer NULL et le compilo dit effectivement ça.

    Maintentant la norme dit:
    An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.

    The macro NULL is defined in <stddef.h> as a null pointer constant.

    Le préprocesseur remplace NULL par 0 (ou (void *)0 ou 0L ou 0U, etc) et c'est bien le compilateur (ou le front-end, en tout cas c'est pas la lib) qui a la charge de convertir ce 'null pointer constant' en 'null pointer'.