Delphi.cz

Český portál Delphi

Chyba pro dnešní den

Je třeba to zveřejnit jako odstrašující případ (kód je trochu upraven)


const
  ciTabBarInterval = 0;
  ciTabBarDay = 1;
  ciTabBarWeek = 2;
var
  bIsInterval: Boolean;
…

bIsInterval:= not TabBar.SelectedTab.Index in [ciTabBarDay, ciTabBarWeek];

Problém byl, když byl TabBar.SelectedTab.Index = 0. Takto samostatně je to evidentní že?

Problém je samozřejmě s prioritou. Operátor not má větší prioritu než in. Index je typu Integer, takže se provede not Index (pro hodnotu 0 je binární not ve výsledku samé binární 1, tj. -1). Pro začátečníky připomínám, že nejvyšší bit u typu integer určuje znaménko - proto ta -1.

No a -1 samozřejmě v tom intervalu není.

Pro správné řešení stačí samozřejmě jen doplnit závorky:


bIsInterval:= not (TabBar.SelectedTab.Index in [ciTabBarDay, ciTabBarWeek]);

Datum: 2012-04-19 17:40:00 Tagy: začátečníci, praxe, utrzky

Praxe Začátečníci