PIC a C

Josef Štengl ok1ced na nagano.cz
Úterý Květen 20 14:30:15 CEST 2014


Já to vím, jak jsem se již snažil naznačit, jde spíše o idealizmus než o praktičnost. Moje osobní domněnka je to, že se 
při zápisech vyskytovaly chyby kvůli proměnné délce int a, jak jsem z těch proklatých doplňkových standardů vyrozuměl, 
neznalostech programátorů. Ono je jednodušší napsat pravidlo pro psaní než; nechť jest dán do kladby ten, kdo neznalého 
nechá pracovati jehož podmínky nedobré budou jen se zdáti.

A že jsem jich napsal, než jsem se nejednou prokousal C normou.

Jen tak pro zábavu si přečtěte MISRA standart, aby jste se vám zvedla nálada, že takhle to psát nemusíte :-). Čistě podle 
tohoto standartu je nemožné psát low-level drivery. Ale přiznávám, že tak 40% pravidel je rozumných (a 20% jsou sadistické 
výplody teoretických idealistů které vedou na nepřehledný kód a útrpné vytí zoufalých programátorů).
Mimochodem tyto doporučení vycházení nejčastěji z C90, C99 má spoustu věcí lépe vyřešených (například celočíselné 
znaménkové dělení).

Když máte kliku, tak pro 5) je 20% práce kód. Včetně komentářů a modulové dokumentace (+ návrh). Je to pak o papírech a 
testech a používání omezené množiny možností jazyka (dost výrazné omezení je pro C++).

K&R by se asi divili až u 7) :-).

ced


Dne 20.5.2014 13:37, David Obdrzalek napsal(a):
> 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.
>
> _______________________________________________
> 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