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