Code snippets, ideas and events from IT related projects

by Robert Gawron

Programowanie w C: jedna sztuczka

Pisząc kod w C, przez nieuwagę, łatwo jest popełnić błędy w warunkach instrukcji warunkowych. Sytuację ukazuje przykład:

   1  int main(){
   2      int x;
   3  
   4      /* first case */
   5      /* OK */
   6      if(x==6){
   7          /* sth */
   8      }
   9      /* WRONG */
  10      if(x=6){
  11          /* sth */
  12      }
  13  
  14      /* second case */
  15      /* OK */
  16      if(x!=6){
  17          /* sth */
  18      }
  19      /* WRONG */
  20      if(x=!6){
  21          /* sth */
  22      }
  23  
  24      return 0;
  25  }

Składnia błędnych warunków jest poprawna, więc kod skompiluje się, lecz nie będzie działał wg. oczekiwań.

Problem łatwo ograniczyć, zamieniając kolejność argumentów, czyli pisząc stałe po lewej stronie, a zmienne po prawej. Kompilacja zostanie przerwana przy błędnie określonych warunkach, gdyż do stałej nie można przypisać wartości. Przeanalizujmy poniższy przykład:

   1  int main(){
   2      int x;
   3  
   4      /* first case */
   5      /* OK */
   6      if(6==x){
   7          /* sth */
   8      }
   9      /* WRONG */
  10      if(6=x){
  11          /* sth */
  12      }
  13  
  14      /* second case */
  15      /* OK */
  16      if(6!=x){
  17          /* sth */
  18      }
  19      /* WRONG */
  20      if(6=!x){
  21          /* sth */
  22      }
  23  
  24      return 0;
  25  }
rgawron@foo:~$ gcc s2.c
s2.c: In function ‘main’:
s2.c:10: error: lvalue required as left operand of assignment
s2.c:20: error: lvalue required as left operand of assignment
Pomysł nie jest mój, ot usłyszałem go przypadkowo. Koniec.

Pingbacks

No pingbacks yet

Comments

No comments for this post

Leave your reply

Let me know what you think

Required. 30 chars of fewer.

Required.

captcha image