🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

macro "subtile"

#15531
From: Pierre Habouzit
Date: Sun, 18 Sep 2005 10:56
54 lines
2670 bytes
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.

J'aurais donc aim� faire une macro (appelons la TRANSMIT_PARSE_ERROR) qui :
 * soit fasse un return si le r�sultat est n�gatif
 * soit prenne la valeur du r�sultat sinon
pour pouvoir faire par exemple :

    int parse_result;

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


j'ai essay� pas mal de trucs du genre :

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

ou encore :

    #define TRANSMIT_PARSE_ERROR(result, expr) \
        ( ((result) = (expr)) < 0 ? return (result) : (result) )

et d'autres choses encore toutes plus moches les unes que les autres. Mais
aucune ne cr�e du code syntaxiquement correct.


bref, si qqn a une suggestion, je suis preneur !
-- 
�O�  Pierre Habouzit
��O                                                madcoder@debian.org
OOO                                                http://www.madism.org
Technical Details
Message-ID: <432d47bb$0$26362$626a14ce@news.free.fr>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!nocworld.net!u-picardie.fr!glou.fr.eu.org!proxad.net!infeed-2.proxad.net!news18-e.free.fr!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,3560d64a4d94fc2b,start
X-Google-Attributes: gidf9822,public
X-Google-Language: FRENCH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!nocworld.net!u-picardie.fr!glou.fr.eu.org!proxad.net!infeed-2.proxad.net!news18-e.free.fr!not-for-mail
Message-ID: <432d47bb$0$26362$626a14ce@news.free.fr>
From: Pierre Habouzit <madcoder@debian.org>
Subject: macro "subtile"
Newsgroups: fr.comp.lang.c
Date: Sun, 18 Sep 2005 12:56:51 +0200
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: 54
Organization: Guest of ProXad - France
NNTP-Posting-Date: 18 Sep 2005 12:55:55 MEST
NNTP-Posting-Host: 82.225.205.10
X-Trace: 1127040955 news18-e.free.fr 26362 82.225.205.10:58075
X-Complaints-To: abuse@proxad.net