Re: C: kontrola vstupní hodnoty do procedury preprocesorem.

Ondrej ondrej-hwl na hawsys.cz
Pondělí Červenec 9 21:52:56 CEST 2018


Stejný problém nastane, pokud někdo v H o několik řádů výše a bůh ví kde 
napíše

#define A Q

a váš define se změní z #define AA na #define QQ

Uznávám, že tento příklad je trochu umělý, ale princip je stejný. 
Obráceně by se pak cizí makro #USE_AA stalo #USE_5 (AA = anti aliasing) 
a to už dává smysl.

Nehledě na to, že bez maker se provede typová kontrola. A navíc časem tu 
funkci může volat kdokoliv odkudkoliv a pak se kontrola parametrů přímo 
v ní může hodit a assert se může v release verzi programu vyhodit takže 
ani nezpomaluje.


Uznávám že preprocesor je silný nástroj, ale o přenositelnosti dost 
pochybuji. K jakému účelu byl mimochodem zamýšlen? Podle mě dnes 
kompilátor dokáže to samé lépe a rychleji a bezpečněji a použití 
preprocesoru by se mělo omezit na H soubory a #ifndef NAME #define NAME 
#endif


O.



Dne 9.7.2018 v 21:29 Jaroslav Buchta napsal(a):
> Uz podruhe mne mate jak AA a BB prechazi na A a B - ale mozna jsem to 
> jen nepochopil...
> Obecne to IMHO nejde, protoze jako argument muzete predt treba 
> UdelejNeco(*((uint32_t*)1234)); a preprocesor je v ...
>
> Dne 09.07.2018 v 21:19 Miroslav Draxal napsal(a):
>>
>> Rozvedu to:
>>
>> #define AA 5
>>
>> #define BB 10
>>
>> #if A+10+B > 200
>>
>> #             error "Cislo je moc velké"
>>
>> #endif
>>
>> UdelejNeco (A+10+B);
>>
>> Sem míří moje otázka. UdelejNeco je procedura v knihovně. Volám jej 
>> několikrát z main. To #if bych rád v knihovně ne v main, a aby to 
>> vyhodnocoval preprocesor, ne program.
>>
>> Snad je to popsáno správně.
>>
>> *From:*Hw-list [mailto:hw-list-bounces na list.hw.cz] *On Behalf Of 
>> *Jaroslav Buchta
>> *Sent:* Monday, July 09, 2018 8:19 PM
>> *To:* hw-list na list.hw.cz
>> *Subject:* Re: C: kontrola vstupní hodnoty do procedury preprocesorem.
>>
>> Nevim jak to myslite, preprocesor je IMHO mocny nastroj jazyka C, 
>> ktery z nej prave dela idealni jazyk pro psani programu 
>> prenositelnych na ruzne platformy a pritom na nizke urovni.
>> Jen se musi pouzivat k ucelu, ke kteremu byl zamyslen...
>>
>> Nechapu presne, co tazatel chce, jestli vyhodnoceni argumentu pro 
>> funkci ve fazi prekladu, tak bych sel cestou modifikace algoritmu, 
>> aby to nebylo potreba.
>>
>> Dne 09.07.2018 v 19:22 Ondrej napsal(a):
>>
>>     Zdravím
>>
>>     nemohlo by pár const statických "proměnných" a inline funkcí a
>>     assert udělat stejnou práci. A lépe. C preprocesor je zlo a jeho
>>     použití nedává u modernách překladačů většinou moc smysl.
>>
>>     O.
>>
>>     Dne 9.7.2018 v 11:41 Miroslav Draxal napsal(a):
>>
>>         Zdravím vespolek,
>>
>>         Lze nějakým šikovným zápisem kontrolovat vstupní hodnotu
>>         procedury preprocesorem? Nic mě nějak nenapadá.
>>
>>         #define AA 5
>>
>>         #define BB 10
>>
>>         UdelejNeco (A+10+B);
>>
>>         Zkontrolovat preprocesorem, aby hodnota řekněme nebyla větší
>>         než 200.
>>
>>         Díky za pomoc, Míra
>>
>>
>>
>>
>>         _______________________________________________
>>
>>         HW-list mailing list  -  sponsored bywww.HW.cz <http://www.HW.cz>
>>
>>         Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>>
>>         http://list.hw.cz/mailman/listinfo/hw-list
>>
>>
>>
>>
>>
>>     _______________________________________________
>>
>>     HW-list mailing list  -  sponsored bywww.HW.cz <http://www.HW.cz>
>>
>>     Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
>>
>>     http://list.hw.cz/mailman/listinfo/hw-list
>>
>>
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored bywww.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/20180709/b56fecc2/attachment.html>


Další informace o konferenci Hw-list