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