Chyba znalazłem buga w kompilatorze gcc-4.3.2. No, może za dużo powiedziane. Pewną niekonsekwencję.
Przykład: oto kod, który nic nie wyświetli na ekranie:
Natomiast jeśli dodasz w 1 linijce nawiasy, to dostaniesz buźkę ":)"
Z tego, co się uczyłem, po if oraz po for można napisać 1 komendę i nie trzeba używać nawiasów. Czyli pierwszy i drugi przykład powinny dawać ten sam wynik. A nie dają.
Zdumiewające!
Sprawdziłem że:
- coś takiego działa:
- oraz coś takiego działa:
Czyli tylko jak połączysz te 2 przypadki razem i napiszesz to co w pierwszym przykładzie, kompilator gubi się w kolejności wykonywanych operacji. I trzeba użyć nawiasów, żeby mu pomóc.
Przykład: oto kod, który nic nie wyświetli na ekranie:
if(0) for(;;) if(1) ;
else if(1) printf(":)\n");
Natomiast jeśli dodasz w 1 linijce nawiasy, to dostaniesz buźkę ":)"
if(0) for(;;) { if(1) ; }
else if(1) printf(":)\n");
Z tego, co się uczyłem, po if oraz po for można napisać 1 komendę i nie trzeba używać nawiasów. Czyli pierwszy i drugi przykład powinny dawać ten sam wynik. A nie dają.
Zdumiewające!
Sprawdziłem że:
- coś takiego działa:
if(1) for(int i=0; i<1; i++) if(1) printf(":)\n");
- oraz coś takiego działa:
if(0) for(;;) ;
else if(1) printf(":)\n");
Czyli tylko jak połączysz te 2 przypadki razem i napiszesz to co w pierwszym przykładzie, kompilator gubi się w kolejności wykonywanych operacji. I trzeba użyć nawiasów, żeby mu pomóc.
Wszystko się zgadza. Pierwszy kod jest równoważny kodowi:
OdpowiedzUsuńif(0) {
for(;;) {
if(1) ;
else if(1) {
printf(":)\n");
}
}
}
Czyli zamieszanie polega na tym, że w drugim przypadku else jest dopasowywany do zewnętrznego if'a. W pozostałych przypadkach również nie ma problemu z matchowaniem else'a.
Racja. Mój błąd. Czyli to jednak ja jestem głupi, a twórcy gcc mądrzy.
OdpowiedzUsuńJeśli jesteś tym Kamilem, o którym myślę, że jesteś, to strzeż się. Gonię Cię na SPOJu (ech, zabrałem się za te zadanka o 6 lat za późno...). Mimo wszystko 50 punktów w 5 dni nie jest złym wynikiem.
No, to tam powodzenia! Coś chyba za proste zajęcia Wam w tej Danii zrobili, że spoja robisz... Koleżanki też nie-tego? ;)
OdpowiedzUsuń