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 assignmentPomysł nie jest mój, ot usłyszałem go przypadkowo. Koniec.
Pingbacks
No pingbacks yetComments
No comments for this post