<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Stane se to v C i v C++ (podle mě preprocesor je pro oba jazyky
      zhruba stejný). Osobně jsem se s tím koneckonců několikrát setkal.<br>
    </p>
    <p><br>
    </p>
    <p>Jako příklad si vezměme  externí knihovnu, která v souboru
      "extLibErrCode.h" definuje</p>
    <p>#define E_OK         666<br>
    </p>
    <p><br>
    </p>
    <p>A dále "náš soubor" test.c, který bude obsahovat</p>
    <p>#include <extLibErrCode.h></p>
    <p><br>
    </p>
    <p>#define ALE_OK              (1<<5)  // bit in register<br>
    </p>
    <p><br>
    </p>
    <p>int ARE_OKAPI (Animal *a); //check if animal is okapi</p>
    <p><br>
    </p>
    <p>po průchodu preprocesorem se z souboru test.c stane</p>
    <p>#include <extLibErrCode.h></p>
    <p><br>
    </p>
    <p>#define AL666              (1<<5)  // bit in register<br>
    </p>
    <p><br>
    </p>
    <p>int AR666API (Animal *a); //check if animal is okapi</p>
    <p><br>
    </p>
    <p>a následný překlad selže. Bohužel původní soubor extLibErrCode.h
      není náš a nemůžeme ho změnit. <br>
    </p>
    <p><br>
    </p>
    <p>Soubor test.c sice náš je, takže ho upravit můžeme (např.
      přidáním #undef E_OK) nicméně to není čisté řešení.</p>
    <p><br>
    </p>
    <p>V rámci C nastane podobný problém, pokud dvě entity definují
      stejnou globální proměnnou (třeba int last_error_code;). V C++ jde
      problém obejít tím, že vše se umístí do vhodného namespace.
      Jenomže preprocesor jde na řadu jako první a namespace ho naprosto
      nezajímají.</p>
    <p><br>
    </p>
    <p>Ještě bych dodal, že to co jsem psal nezvýší velikost kódu nebo
      proměnných o jediný byte. Optimalizace je koneckonců stejná pro
      CPU s 8 jako 800 MHz. Ono totiž když máte 800 Mhz tak tam toho
      většinou běží více nebo je úloha tak náročná, že plýtvat výkonem
      stejně nejde. Nehledě na to, že dělat optimalizaci předtím, než
      kód vůbec někde běží a můžeme si změřit, kde je "bottleneck" je
      cesta do pekel. Ono stejně v 99% případů buď optimalizace není
      potřeba nebo je nejlepší ji nechat na kompilátoru. A to 1% je buď
      něco jako kódování videa, na co se stejně použije externí knihovna
      nebo hodně specifický případ.<br>
    </p>
    <p><br>
    </p>
    <p>Ondřej</p>
    <p><br>
    </p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">Dne 24.8.2021 v 0:57 Pavel Hudecek
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:LQ.bQLlm.3NjNY1p6ikp.1X92Vm@seznam.cz">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style>@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}.MsoChpDefault
        {mso-style-type:export-only;}div.WordSection1
        {page:WordSection1;}</style>
      <div class="WordSection1">
        <p class="MsoNormal">Já to teď vyzkoušel v C i C++ a teda nic
          takovýho se nedělo.</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">PH</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <div
          style="mso-element:para-border-div;border:none;border-top:solid
          #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
          <p class="MsoNormal" style="border:none;padding:0cm"><b>Od: </b><a
              href="mailto:konfera@efton.sk" moz-do-not-send="true">Jan
              Waclawek</a></p>
        </div>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">> * #define - [...] </p>
        <p class="MsoNormal">> Pokud napø. </p>
        <p class="MsoNormal">> definujete makro ERROR na 1 a nìkdo
          použije funkci se jménem PRINT_ERROR </p>
        <p class="MsoNormal">> tak vaše makro jí zmìní na PRINT_1
          (nehledì na namespace).</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Takto to funguje v C++?</p>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-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>
  </body>
</html>