GCC - implicitní číselný datový typ

Josef Štengl ok1ced na nagano.cz
Čtvrtek Březen 19 09:47:48 CET 2015


V textu

Dne 18.3.2015 v 14:16 Ondřej Staněk napsal(a):
> Děkuji Vám za odpověď.
>
> Možná bude právě ta nejschůdnější cesta zajistit, aby byl kód vskutku multiplatformní.
ano

  Pak se na problém můžu dívat tak, že kód který není multiplatformní je chybný a neměl by projít testy.
ano, v případě že se nejedná o driver HW - ale ty se moc testovat nedají.

>
> Ona ta část kódu, kterou testuji není nijak vázána na konkrétní platformu - nevyžaduje ani některé základní knihovny (
> stdio, stdlib). Žádná práce s řetězci, dynamická alokace, vstup/výstup. Pouze holé výpočty a funkční volání, struct, enum,
> statická pole. To je vše.
Výborně, půjde to  „bez problémů“. Jen pozor a to, jak je definován typ enum - aby byl stejně definován (estli jako int 
(standard C) nebo dle hodnot (EABI ...).

>
> Teď jen hádám - pro tenhle konkrétní případ by to asi znamenalo, že vynutíme explicitní přetypování před každou numerickou
> konstantu v kódu.
ano (prakticky stačí jen pro podobné případy, kdy je to nejasné). A nezapomenout pečlivě rozlišovat signed a unsigned pro 
posuv (spousta CPU jader rozlišuje signed a unsigned posuv, pokud jste zvyklý unsigned tak vás to někdy může nepříjemně 
překvapit.

  Je to asi cesta do pekel,
ne. Je to cesta z C pekla :-).

  ale čistě teoreticky, možná by šlo takové chování nastavit v gcc? Např. že
> překladač vypíše spoustu paranoidních warningů pokaždé, když hrozí podobná chyba v číselných výrazech (chybí přetypování
> před konstantou).
>
> Asi bych se měl spíše zaměřit tímto směrem, možná existují nějaké nástroje které kontrolují, zda je C kód multiplatformní
> (nebo alespoň upozorní na potenciální chyby).
>
myslím, že na něco je warning (gcc moc nepoužívám -Wall -Wex..něco)?
Ale lepší je statistický analyzátor kódu.


> Přeji pěkný den,
> Ondra Staněk
>
> On 03/18/2015 12:41 PM, Jan Waclawek wrote:
>>> vrtá mi hlavou jakým způsobem lze nastavit implicitní číselný datový typ
>>> pro překladač GCC. Vysvětlím na příkladě:
>> Nijakym.
>>
>> Ja chapem Vasu motivaciu, ale je scestna z principu.
>>
>>> Mám multiplatformní C kód,
>> Tak to teda nemate.
>> Ak ma byt multiplatformny, tak musi byt tak napisany explicitne, t.j. tam
>> to pretypovanie konstanty resp. zapis konstanty s explicitlne predpisanou
>> sirkou musite mat. Bodka.
>>
>>> (AVR). Kód je pokrytý automatickými testy (unit tests). Automatické
>>> testování probíhá na PC, kvůli rychlosti a snadnému debugování.
>> Chyba. Testuje sa zasadne na cielovej platforme a s takymi nastaveniami
>> prekladaca, ktore su zhodne s cielovym nastavenim. Bodka.
>>
>>> Emulátor není moľné při testech pouľít,
>>> kód musí běľet nativně na PC (kvůli testovacímu frameworku a vazbám na
>>> integrační testy).
>> Zakladna chyba je potom v testovacom frameworku, zahodte ho, vymente ho,
>> prepiste ho.
>>
>> Mimochodom, okrem emulatorov (resp. v pripade AVR s pravdepodobnostou
>> hraniciacou s istotou aj tak emulator nemate, mate OCD a nadvazujuce
>> nastroje) existuju aj simulatory; ale do toho by som ja osobne pre tento
>> pripad tiez nesiel.
>>
>> Akakolvek ina odpoved Vas zavedie do bludneho kruhu, dajte si povedat.
>>
>> wek
>>
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored bywww.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
> _______________________________________________
> 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