Re: C: deklerace proměnné v bloku CASE (xc8)

Jan Waclawek konfera na efton.sk
Úterý Srpen 21 14:24:26 CEST 2018


Problem spociva v tom, ze "uint8_t y;" je *declaration* a nie *statement*.
"case xxx: yyy" je tzv. *labeled statement* kde podla C99, 6.8.1 yyy musi
byt *statement*.

Okrem uzavretia do bloku (co je *compound statement* a ja by som to
doporucil ako vhodnu prax, okrem ineho aj pre obmedzenie viditelnosti a
zivotnosti deklarovanej lokalnej premennej) sa da urobit napr. aj to, ze
medzi "case xxxx:" a "uint8_t y" sa vlozi jedna bodkociarka.

Mnohi sa uz zrejme stretli s tymto istym obmedzenim v podobe chyby pri
preklade:

{
  [...]
  goto zzz;
  [...]
  zzz:
}

t.j. ked za zzz nenasleduje *statement* ale koniec bloku.

wek


----- Original Message ---------------

Subject: C: deklerace proměnné v bloku CASE (xc8)
   From: "Miroslav Draxal" <evik at volny.cz>
   Date: Tue, 21 Aug 2018 13:15:46 +0200
     To: "'HW-news'" <hw-list at list.hw.cz>

>Dobrý den,
>
>Dneska jsem narazil na zajímavou věc a nevím proč se tak děje
>
> 
>
>Pokud 
>
> 
>
>switch (x)
>
>               case 1:
>
>               uit8_t y;
>
> 
>
>při překladu skončí chybou error: (317) "(" expected          
>
> 
>
>switch (x)
>
>               case 1:
>
>               ;                            //           nebo NOP(); nebo
>jakýkoliv programový řádek
>
>               uit8_t y;
>
> 
>
>uľ přeloľí OK.
>
>?????
>
>Díky za objasnění záhady, Míra
>



Další informace o konferenci Hw-list