PIC a C
David Obdrzalek
David.Obdrzalek na mff.cuni.cz
Úterý Květen 20 13:37:30 CEST 2014
On 20 May 2014 at 12:33, Josef Štengl wrote:
> Pokud píšete pro korporace / SIL, tak porovnání je v coding standardu. Je
> to proto, aby bylo vidět, co tím autor zamýšlel
> a aby výsledek podmínky byla logická hodnota (true, false). Já se
> nehádám, já jen shrnuji zdůvodnění které jsem našel,
> když jsem se zajímal o důvod.
>
> příklad
> if(byte&maska)
> výsledek není logická hodnota (dost tady skřípe idealistický a
> praktický přístup)
No ale v C je výsledkem porovnání int a ne logická hodnota, i true a false jsou
podle C99 int s hodnotou 1/0. Tak kde to ty korporace vzaly?
C99 §6.5.9/3: The == (equal to) and != (not equal to) operators are analogous
to the relational operators except for their lower precedence. Each of the
operators yields 1 if the specified relation is true and 0 if it is false. The
result has type int. For any pair of operands, exactly one of the relations is
true.
7.16: ... The remaining three macros are suitable for use in #if preprocessing
directives. They are
true
which expands to the integer constant 1,
false
which expands to the integer constant 0
> if((byte&maska)==1)
> to je nevyhovující kód, není zřejmé proč je tam ta jednotka.
Souhlas
> if ((byte & NECO_MASKA) == NECO_AKCE_ZAP)
> tak nějak si to autoři těch pravidel představovali, jestli jsem je
> správně pochopil.
Tohle beru a prosazuju, pokud se jedná o porovnání s hodnotou, která je víc než
jen nahozený/shozený bit. Tam číselné konstanty nemají co dělat. Ale tady jede
o ten ano/ne flag, a tam je podle mě zcela v pořádku testovat jestli to je nebo
není různé od nuly.
> :-)
> Pro odlehčení, soukromě rozlišuji tyto kategorie kódů (resp stylů
> procesů a programování)
> 1) jen napsat
> 2) akademický/studentský styl
> 3) industrial styl
> 4) bezpečný industrial styl
> 5) SIL/MILITARY kódy.
> 6) SPACE
> 7) idealisticky čisté.
Jak asi vypadá 5 nebo 6, to by se asi i Kernighan divil :-)
D.O.
Další informace o konferenci Hw-list