Typy v C++

Miroslav Šinko sinkomiro na gmail.com
Sobota Leden 15 13:54:58 CET 2022


No, aspon vidite, ze vsade za if/else davam zatvorky, potom ; nevadi.
Mate pravdu. Konstrukciu do{...}while(0) pouzivam. Svoj priklad som 
zobral z "rychlej" utility, nie z produkcneho kodu :)

miro

On 15.1.2022 13:51, Jaroslav Buchta wrote:
> 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
>>


Další informace o konferenci Hw-list