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