C makro - konstrukce do{...}while(0)

Milan B. milan na bastl.sk
Neděle Prosinec 3 20:54:20 CET 2017


On 03.12.2017 20:42, Milan B. wrote:
>
> Takto vznikne bezpecny kus kodu - ked sa makro pouzije kdekolvek, tak 
> by nemalo dojst k nespravnej interpretacii alebo naruseniu struktury 
> okoliteho kodu (napr. bodkociarka za volanim makra moze robit galibu)

Este prikladik. Ak sa nepouzije do ... while(0) ale iba blokove 
zatvorky, nasledujuce volanie skonci chybou kompilatora - bodkociarka 
bude ako prazdny prikaz a "oddeli" else od prislusneho if

   if (...)
     MACRO;
   else
     return 0;

Kod bez bodkociarky:
   if (...)
     MACRO
   else
     return 0;

bude OK. Ak sa pouzije do ... while(0), oba pripady budu OK.

Este jedno vyuzitie do...while(0)  (mimo makier): ak mam dlhy kus kodu z 
ktoreho treba v pripade chyby predcasne vyskocit a nemam rad goto, mozem 
na skakanie na koniec pouzit break:
do {
     <mnoho kodu>
     if ( .... )
        break;
     <mnoho kodu>
     if ( .... )
        break;
     <mnoho kodu>
     if ( .... )
        break;
     <mnoho kodu>
} while(1)

-m-

>
> Mimochodom, GCC  by malo poznat  konstrukciu ({ .... }) , ale to bude 
> asi neprenositelne.
>
> -m-
>
> On 03.12.2017 20:25, Jaroslav Buchta wrote:
>> Casto se setkavam napr. s takovouto konstrukci makra
>>
>> #define __RETURN(GSM, val)                      do { (GSM)->RetVal = 
>> (val); return (val); } while (0)
>>
>> Proc se to uzavira do cyklu do...while s jednou iteraci a ne jen do 
>> bloku?
>>
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20171203/2d6a74e7/attachment.html>
------------- další část ---------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3980 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20171203/2d6a74e7/attachment.bin>


Další informace o konferenci Hw-list