🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #15533

Re: macro "subtile"

#15533
From: Pierre Habouzit
Date: Sun, 18 Sep 2005 11:38
89 lines
3879 bytes
Eric Levenez wrote:

> Le 18/09/05 12:56, dans <432d47bb$0$26362$626a14ce@news.free.fr>, ��Pierre
> Habouzit�� <madcoder@debian.org> a �crit�:
> 
>> J'ai un tas de fonctions de parsing qui renvoient des ints.
>> 
>> les valeurs n�gatives de ces ints signifient `erreur' et les valeurs
>> positives ont une s�mantique selon les fonctions.
>> 
>> j'ai donc souvent (� l'int�rieur de fonctions de parse) � �crire des
>> trucs du genre :
>> 
>>     int parse_result;
>> 
>>     parse_result = ma_fonction_de_parse(ses_args);
>>     if (parse_result < 0) {
>>         return parse_result; /* faire remonter l'erreur */
>>     }
>>     /* ... utilise �ventuellement parse_result */
>>     
>> 
>> ce qui � la longue rend les fonctions de parse un peu p�nibles � lire.
> 
> Avoir un code propre et lisible pas tous n'est pas forc�ment "p�nible".

justement, lorsque ta fonction de parse en utilise beaucou d'autres, le code
de la dite fonction n'arrete pas de tester les retours, ce qui est
largement d�sagr�able, parce que � cause de ca, le code de la fonction
d�passe all�grement les 30 lignes, et tu ne peux pas voir d'un seul coup
d'oueil ce qu'elle fait.

la concision est *aussi* une forme de lisibilit�.

maintenant, je crois que demander � ma macro de retourner le resultat est
trop demander d'expressivit�, donc je vais me contenter de lui faire faire 

     #define TRANSMIT_PARSE_ERROR(result, expr) \
         do {                                   \
             if ( ((result) = (expr)) < 0 ) {   \
                 return result;                 \
             }                                  \
         } while(0)

qui permet au moins de "cacher" le test.


> Tu peux toujours essayer un truc hideux du genre :
> 
> #define SWITCH_TRANSMIT_PARSE_ERROR(result, expr) \
>     if ( ((result) = (expr)) < 0 ) {       \
>         return result;                     \
>     } \
>     switch (result)

non, ca c'est pas hideux, c'est atroce ;p


> int parse_result;
> 
> 
>     SWITCH_TRANSMIT_PARSE_ERROR(parse_result,
>         ma_fonction_de_parse(ses_args))
>     {
>     /* ... */
>     }
> 
> Ton code sera ainsi illisible et non maintenable, mais peut-�tre que tu le
> trouveras pas "p�nible" � lire... :-)

ca oui c'est inmaintenable, je suis tout � fait d'accord avec toi.
je voulais en effet sans doute faire "trop" concis.

un :

    int parse_result;

    TRANSMIT_PARSE_ERROR(parse_result, ma_fonction_de_parse(ses_args));
    switch(parse_result) {
        /* ... */
    }

est apr�s tout un bon compromis.

merci !
-- 
�O�  Pierre Habouzit
��O                                                madcoder@debian.org
OOO                                                http://www.madism.org
Technical Details
Message-ID: <432d517a$0$29495$626a14ce@news.free.fr>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!infeed-1.proxad.net!news18-e.free.fr!not-for-mail
References: <432d47bb$0$26362$626a14ce@news.free.fr> <BF53199C.45780%new@levenez.com>

Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,3560d64a4d94fc2b
X-Google-Attributes: gidf9822,public
X-Google-Language: FRENCH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!infeed-1.proxad.net!news18-e.free.fr!not-for-mail
Message-ID: <432d517a$0$29495$626a14ce@news.free.fr>
From: Pierre Habouzit <madcoder@debian.org>
Subject: Re: macro "subtile"
Newsgroups: fr.comp.lang.c
Date: Sun, 18 Sep 2005 13:38:26 +0200
References: <432d47bb$0$26362$626a14ce@news.free.fr> <BF53199C.45780%new@levenez.com>
User-Agent: KNode/0.9.2
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 8Bit
X-Face: $(^e[V4D-[`f2EmMGz@fgWK!e.B~2g.{08lKPU(nc1J~z\4B>*JEVq:E]7G-\6$Ycr4<;Z!|VY6Grt]+RsS$IMV)f>2)M="tY:ZPcU;&%it2D81X^kNya0=L]"vZmLP+UmKhgq+u*\.dJ8G!N&=EvlD
Lines: 89
Organization: Guest of ProXad - France
NNTP-Posting-Date: 18 Sep 2005 13:37:30 MEST
NNTP-Posting-Host: 82.225.205.10
X-Trace: 1127043450 news18-e.free.fr 29495 82.225.205.10:36729
X-Complaints-To: abuse@proxad.net