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