Typy v C++

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Sobota Leden 15 13:51:31 CET 2022


V tom Vasem zapisu nebude uplne koser strednik za takovym makrem, ne?
Myslim, ze z tohoto duvodu se pouziva spis konstrukce (kdyz prepisu Vas 
priklad):

#define LOG(format, ...)\
do {\
     printf(__FUNCTION__);\
     printf(": ");\
     printf(format, ##__VA_ARGS__);\
     printf("\n");\
} while(0)

Nebo to ma jeste jiny duvod?

Dne 15.01.2022 v 13:45 Miroslav ©inko napsal(a):
> On 15.1.2022 10:54, Jindroush wrote:
>> PS: Ten priklad s tim makrem Log nedava takto smysl, anzto i kdyby bylo
>> makro Log prazdne, stejne je tam strednik, takze v efektu je to "if(
>> zapis );", coz zpusobi v nekterych prekladacich warning, ale nema to ten
>> popisovany vedlejsi efekt.
>
> Ano, problem byva skor opacny. Konkretny priklad (z "velkeho" 
> pocitaca, nie MCU, preto printf :) )
>
> Ked makro obsahuje viac prikazov, treba ho uzavriet do zlozenych 
> zatvoriek, ako tu:
>
> #define LOG(format, ...)\
> {\
>     printf(__FUNCTION__);\
>     printf(": ");\
>     printf(format, ##__VA_ARGS__);\
>     printf("\n");\
> }
>
> Bez zatvoriek by takato konstrukcia pri nesplneni podmienky nevykonala 
> len prvy prikaz, ostatne ano:
>
> if(...)
>   LOG("ERROR: ocrType=%hu is not known", ocrType);
>
> Alebo takato konstrukcia by hodila error misplaced else, co je lepsi 
> pripad, donuti sa zamysliet nad pricinou:
>
> if(...)
>   LOG("ERROR: ocrType=%hu is not used", ocrType);
> else
>   ...
>
> Inac ja tiez zapisujem vsetky if/else so zatvorkami, je to dobry zvyk, 
> teda takto:
> if(...)
> {
>   LOG("ERROR: ocrType=%hu is not used", ocrType);
> }
>
> miro
>
>> On 15.01.2022 10:40, Michal Gregor wrote:
>>> Tak MISRA neni zbytecna. Ono to ignorrovani warningu se dost vymsti:
>>>
>>> uint16_t Teplota;
>>> uint8_t TeplotaZobrazena;
>>> TeplotaZobrazena = Teplota;
>>> Prekladac tam samozrejme dal warning, ale vsichni na to kaslali. A pak
>>> se hledala chyba asi dva dny.
>>> Krome toho TeplotaZobrazena je pouze Fahrenheita ale Teplota muze byt
>>> i v celsiech.
>>>
>>> Nebo tohle
>>> if (zapis)
>>>     Log(teplota);
>>> teplota = teplota + 23;
>>>
>>> Dalsich par dni zabitych, kvuli lenosti. Log neni funkce, ale makro,
>>> ktere funguje pouze v debug verzi. Takze se radek teplota = teplota +
>>> 23; ignoroval.
>>>
>>> Spravne to ma byt:
>>> if (zapis)
>>> {
>>>     DEBUG_LOG(teplota);
>>> }
>>>
>>>
>>>
>>> Michal Gregor
>>>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list




Další informace o konferenci Hw-list