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