Delka log.radku
Pavel Troller
patrol@sinus.cz
Pondělí Prosinec 29 12:57:52 CET 2008
> No ano, potom vse co je za ; je vlastne REM, tak potom nevim proc
> pouzivat /* */. Nemel by kompiler zarvat, ze je chyba?
> Tohle jsou fakt pro me zajimavy chyby, který nekdy objevit je horor.
> Často pomuze nahlednuti ciziho člověka, kterej to nemá v hlave ofoceny
> ale cte sys. radek po radku. MIRA
>
Zdravím,
ne, není pravda, že vše, co je za středníkem, je REM - nejsme v BASICu,
ale v C :-).
Středník je oddělovač jednotlivých "příkazů" - tj. nehraje si na fyzické
konce řádků, ale jen na ukončení pomocí sředníku.
Příklad:
a = 1 ; b = 2 ; c = 3 ;
představuje 3 přiřazovací příkazy na jednom řádku, provedou se všechny.
Mohu ale napsat:
a
=
3
;
a bude to úplně to samé, neboť normální řádková struktura je kompilátorem
ignorována.
A nyní pozor: Vaše chyba způsobila zjednodušeně řečeno toto:
a = 3 ; + 4 ; + 5 ;
Co tohle znamená ? První přiřazovací příkaz dává smysl a proto se provede.
Ten druhý, vzniklý tím nadbytečným středníkem (a třetí jakbysmet) nikam
nepřiřazuje, je to jen ten "výkřik do tmy", který však je v C zcela legální.
To vyplývá z toho, že v C vždy mohu ignorovat návratovou hodnotu volané funkce,
a výraz je vlastně zvláštní případ funkce. Proto to v tomto konkrétním případě
působí, jako by ten středník "zakomentoval" zbytek řádku, ale není tomu tak
- on jen rozdělil jeden složitější výraz v přiřazovacím příkazu na více
jednodušších a u všech kromě prvního chybí levá strana, takže se "zahodí".
Už je to jasnější ?
S pozdravem Pavel Troller
Další informace o konferenci Hw-list