Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 10 sty 2025, o 14:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 24 sie 2014, o 17:37 
Offline
Nowy

Dołączył(a): 24 paź 2012
Posty: 21
Pomógł: 0

Witam,
pierwsze moje pytanie odnośnie języka C. W C++ dozwolone jest definiowanie w pętli więcej niż jedną zmienną. Natomiast w C taka operacja powinna być zakazana. Przykład poniżej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Kod działa poprawnie tzn. robi to co oczekuję przy zabawie z drabinką led. Kompilator kompiluje, ale zaznacza na żółto wyżej pokazaną pętle. Kiedy najadę na żółte pole w Eclipse wyświetla mi taki komunikat:
"left-hand operand of comma expression has no offect"
Lewostronny operator przecinka nie ma efektu? Podejrzewam, że chodzi o to co znajduje się po przecinku, ale czy ktoś mógłby to sprostować?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 18:55 
Offline
Użytkownik

Dołączył(a): 11 lut 2013
Posty: 140
Lokalizacja: Kraków
Pomógł: 10

w ce robisz to tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


powinno działać, spróbuj



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 19:12 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27343
Lokalizacja: Szczecin
Pomógł: 1041

matisek1233 napisał(a):
powinno działać


Na pewno będzie działać ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 19:26 
Offline
Nowy

Dołączył(a): 24 paź 2012
Posty: 21
Pomógł: 0

Mnie zastanawia, dlaczego kompilator coś takiego przepuszcza i co chodzi z tym operand`em.
W C to wiem, że trzeba zmiennie zainicjalizować przed pętlą for, ale używam języka C, a tu kompilator trawi składnię dla C++ ;-)
Dziękuję za odpowiedzi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 20:41 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27343
Lokalizacja: Szczecin
Pomógł: 1041

repro napisał(a):
ale używam języka C, a tu kompilator trawi składnię dla C++


Wcale w C nie trzeba koniecznie definiować zmiennych przed pętlą, można w pętli

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


... zgodnie ze standardem

Obrazek

i to już od dawna, tylko trzeba go właśnie ustawić sobie w opcjach kompilatora jak pokazałem na rysunku wyżej.


Problemem było u ciebie tylko to:

Obrazek

czyli warunek pętli powinien być jeden a nie dwa oddzielone przecinkiem jak ty to próbowałeś zrobić


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 21:31 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Warning wynika z tego, że w przypadku tzw. operatora przecinkowego wartością wyrażenia jest to co znajduje się po prawej stronie przecinka, to co jest po stronie lewej jest ignorowane (operacja jest jak najbardziej wykonywana ale nie ma żadnego wpływu na wartość całego wyrażenia). W twojej pętli faktyczny warunek kontynuacji pętli to "k >= 4", natomiast "i < 4" jest ignorowane i o tym kompilator cię ostrzega. Zamień przecinek w tej części pętli na sumę logiczną i będzie działać. Pozostałe części pętli (przed pierwszym i po drugim średniku) możesz zostawić bez zmian -są to całkowicie prawidłowe, zarówno składniowo jak i logicznie, wyrażenia.


Autor postu otrzymał pochwałę

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sie 2014, o 22:46 
Offline
Nowy

Dołączył(a): 24 paź 2012
Posty: 21
Pomógł: 0

Diabeł tkwi w szczegółach, albo za mało praktyki. Nie mogłem zrozumieć, skąd te ostrzeżenia, ale po tych dwóch wypowiedziach zrozumiałem błąd. W którejś książce autor wspominał to jako zaletę C++ w stosunku do C i tak mi zostało. Dziękuję za sprostowanie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sie 2014, o 09:45 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27343
Lokalizacja: Szczecin
Pomógł: 1041

mokrowski napisał(a):
Co do jednego masz rację. Operator przecinka jest operatorem ,,błędogennym", jak działa trzeba wiedzieć i raczej należy go unikać. Zresztą mówi o tym wyraźnie MISRA-C.
Nawet tu masz niebezpieczeństwo:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Fajny przykład .... rzeczywiście warto o tym wiedzieć.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sie 2014, o 11:42 
Offline
Nowy

Dołączył(a): 24 paź 2012
Posty: 21
Pomógł: 0

mokrowski napisał(a):
Co do jednego masz rację. Operator przecinka jest operatorem ,,błędogennym", jak działa trzeba wiedzieć i raczej należy go unikać. Zresztą mówi o tym wyraźnie MISRA-C.
Nawet tu masz niebezpieczeństwo:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nigdy nie słyszałem o MISRA-C, nawet przez cały tok studiów. Po dłuższej przerwie robię sobie powtórkę z języka i staram sobie urozmaicić tą zabawę, jak mogę. Wychodzą różne niedociągnięcia ;-)
Cieszę się, że wychodzą takie kwiatki, bo pozwala lepiej zrozumieć język. Wczoraj przeglądając ogłoszenia pracy dla programistów C natknąłem się na termin wersjonowanie kodu, co było mi zupełnie obce. Na szczęście mam kolegę, co pracuje, jako programista i trochę mi go naświetlił.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO