<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 03.12.2017 20:42, Milan B. wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:105d7a7e-7923-f516-913f-2ae914a0ff65@bastl.sk">
      <br>
      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)
      <br>
    </blockquote>
    <br>
    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<br>
    <br>
      if (...)<br>
        MACRO;<br>
      else<br>
        return 0;<br>
    <br>
    Kod bez bodkociarky:<br>
      if (...)<br>
        MACRO<br>
      else<br>
        return 0;<br>
    <br>
    bude OK. Ak sa pouzije do ... while(0), oba pripady budu OK.<br>
    <br>
    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:<br>
    do {<br>
        <mnoho kodu><br>
        if ( .... )<br>
           break;<br>
        <mnoho kodu><br>
        if ( .... )<br>
           break;<br>
        <mnoho kodu><br>
        if ( .... )<br>
           break;<br>
        <mnoho kodu><br>
    } while(1)<br>
    <br>
    -m-<br>
    <br>
    <blockquote type="cite"
      cite="mid:105d7a7e-7923-f516-913f-2ae914a0ff65@bastl.sk">
      <br>
      Mimochodom, GCC  by malo poznat  konstrukciu ({ .... }) , ale to
      bude asi neprenositelne.
      <br>
      <br>
      -m-
      <br>
      <br>
      On 03.12.2017 20:25, Jaroslav Buchta wrote:
      <br>
      <blockquote type="cite">Casto se setkavam napr. s takovouto
        konstrukci makra
        <br>
        <br>
        #define __RETURN(GSM, val)                      do {
        (GSM)->RetVal = (val); return (val); } while (0)
        <br>
        <br>
        Proc se to uzavira do cyklu do...while s jednou iteraci a ne jen
        do bloku?
        <br>
        <br>
        <br>
        _______________________________________________
        <br>
        HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
        <br>
        <a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
        <br>
        <a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
        <br>
      </blockquote>
      <br>
      <br>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>