Re: question de C

Top Page

Reply to this message
Author: Raphaël Dorado
Date:  
To: guilde
Subject: Re: question de C
Salut Edgar,

Si on va jusqu'au bout : je n'arrive pas à trouver dans quel cas réel enlever
les parenthèses autour de 'ptr' rendrait la macro moins saine :

       #define REALLOC(ptr, n) realloc(ptr, (n) * sizeof *(ptr))


A+

--Raf

Le 14/04/2022 à 20:48, Edgar Bonet a écrit :
> Bonsoir !
>
> Patrick Dupré a écrit :
>> #define REALLOC(ptr, n, type) (type*) realloc ((void*)ptr, (size_t)(n * sizeof (type)))
>
> Raphaël Dorado a répondu :
>> Il faut mettre des parenthèses autour de chaque référence d'un
>> paramètre de la macro [...]
>
> J'en profite pour glisser trois commentaires en passant:
>
> - en C les casts entre (void *) et autres types de pointeur sont
>    inutiles ;

>
> - le cast en size_t est aussi inutile, vu que c'est déjà le type
>    retourné par sizeof ;

>
> - devoir passer en paramètre le nom du type est source d'erreurs, il
>    vaut mieux utiliser le type vers lequel pointe ton pointeur.

>
> Je te suggère donc :
>
>      #define REALLOC(ptr, n) realloc((ptr), (n) * sizeof *(ptr))

>
> À+,
>
> Edgar.
>