• [^] # Re: Petites precisions

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

    Je ne dis pas que tu as tord sur la norme (de tout manière, j'ai pas la norme sous la main...). Je dis simplement que je n'ai jamais vu d'implémentation qui traite de façon particulière un null pointer. C'est tout.

    > notamment le résultat des comparaisons et conversions de null pointer entre eux ou avec des pointeurs valides.

    Si c'est dans l'esprit SQL :
    char * f (char *p, char * t) {
    return (p + t) -t ;
    }
    si f(NULL, "titi") alors NULL doit être retourné.

    Ceci demande des vérifications à l'exécution et ce'est pas dans l'esprit du language C.

    Ceci dit, un "#define NULL ((void *)xx)" sans traitement particulier du compilateur me convient parfaitement.
    De plus je ne fais jamais de "if (p)", "if (!p)" ou "if (p=malloc(2)) je fais toujours "if (p != NULL)", "if (p == NULL)" et "if ((p = malloc(2)) != NULL).
    Notes que je ne suis pas le seul à faire comme ça (je ne parle pas de Linux).

    D'usage rare, la macro isnull est sympa :
    #define isnull(p) \
    ((p) == NULL)

    If faut toujours utiliser NULL et ne pas considérer que NULL est égale 0. Comme ça il y a pas de problème.

    Je pense que les compilateurs devraient mettre un warning pour les "if (p)", "if (!p)". Ça n'a pas la même signification qu'avec les autres types.