Witam,pragnę nauczyć się programować w jeżyku,prosiłbym o jakieś rady na początek, zasugerowanie jakiś poradników oraz właściwie w jakim programie należy tworzyć…dodam że jestem obecnie kompletnie zielony w tych sprawach,ale szybko się ucze
Edit.
Jeszcze zapomniałem zapytać czym właściwie(i czy to duże różnice),różnie się C od C++?
Z punktu widzenia początkującego, C to tylko ograniczona wersja C++, więc ucząc się tego drugiego automatycznie poznajesz C. Również polecam książkę Pana Grębosza. Może się wydawać, że trochę “wymęcza” temat ale to ma swoje wielkie plusy.
@up
Dev-C++ od zeszłego roku znowu jest rozwijany, z tymże przez kogoś innego ale idea programu jest zachowana.
Ja osobiście zaczynałem od Visual C++ Express i dlatego polecam ten program.
A w Visual C++ Express możesz pisać programy w czystym C++ bez CLI(.NET)? Jeżeli nie to raczej lepiej z tym nie zaczynać korzystając z książek do czystego C++ - pogubi się.
Wiem że Dev-C++ jest dalej rozwijany, ale nadal nie jest w stanie konkurować z jakimkolwiek nowym IDE. Założenia są stare, interfejs stary. Raczej to rozwijanie to bugfixy niż implementacje ficzerów.
C od C++ różni się tym, że C to zaprojektowany i przemyślany język programowania, natomiast C++ to próba stworzenia ośmiornicy poprzez przybicie czterech desek do jamnika.
Z punktu widzenia początkującego, C++ wprowadza sporo zamieszania, które może się niekorzystanie odbić na efektach nauki i na dobrych nawykach.
Z tym to niech się lepiej wstrzyma. Raz że “rzeźbienie” w WinAPI jest trudne nawet dla dość ogarniętego już programisty, a dwa czystego WinAPI w normalnych projektach i tak się nie stosuje, już jak ogarnie programowanie lepiej niech się weźmie za QT czy od razu przerzucić się na .NET/Javę i tam sobie poeksperymentować z obiektowym API dla GUI.
Nie gadajcie, podstawy C++ aż takie porąbane nie są, później jest dopiero masakra.
Visual Studio odradzam na początek - wymaga stosowania projektów, co IMO jest dość niewygodne gdy programy mają 20 linijek. Code::Blocks jest na początek najlepszy. No i kompilator GCC (lub też clang, jak ktoś se doinstaluje), nie uczy żadnych dziwactw pokroju _tmain, _TCHAR, stdafx, conio,h nie trzeba używać (ani pauzy systemowej).
Code::Blocks nie wymaga projektów przykładowo. Możesz stworzyć projekt, ale jak nie masz żadnego projektu, to kompiluje pojedynczy c/cpp z podstawową konfiguracją.
Dev-C++ też nie wymaga, ale tamtejszy edytor kodu woła o pomstę do nieba (nie mówiąc o wersji 4.9, która jest dalej stosowana w szkołach, gdzie jest kompilator sprzed naszej ery).
No może nie trzeba w Visualu tych dziwactw używać, ale jak tworzysz projekt to sam ci tworzy. Przyzwyczai się taki początkujący do _tmainów, _tcharów, stdafx’ów, bierze udział w jakiś zawodach i narzeka że kompilator zepsuty (zwykle GCC 4.4 lub nowszy, choć spotkałem się z przypadkiem że użyto 3.3!), bo mu się kod nie kompiluje, albo przekracza czas, mimo że nie ma żadnej pętli (system(“pause”) na końcu).
Oczywiście, można zacząć od czystego projektu, jednak który początkujący to robi? Podobnie jestem też przeciwny dawaniu początkującym narzędzi RAD, dzięki którym nie potrafiąc zbudować zwykłej pętli mogą robić okienka. za szybko zaczynają okienka i na forach zadają głupie pytania dotyczące podstaw, które powinni opanować przed rozpoczęciem nauki okienek, jak np. “jak przenieść dane z jednej formatki do drugiej”.
Nie przy każdym konkursie jest ostrzeżenie, a nawet jak jest to w FAQ, a po rozpoczęciu konkursu i tak są pytania do prowadzących o błędy.
Związek z Visualem? Tam dopiero w którejś płatnej wersji w okienku Output czy gdzieś tam zostają wyniki wykonania programu (tak słyszałem przynajmniej). W darmowej wersji otwiera się normalnie okienko i zaraz po wykonaniu zamyka, trzeba więc te okienko zatrzymać, albo z konsoli uruchomić (a komu by się to chciało pod Windowsem robić). Za to Code::Blocks, przy uruchamianiu konsolowego projektu/gołego c/cpp program jest uruchamiany przez inny programik, który liczy czas wykonywania. Po zakończeniu programu, nie ważne czy przez exit, return w mainie, czy przez dowolny błąd, zostawia okienko konsoli wyświetlając czas wykonywania i ew. komunikat błędu, np. “Segmentation fault”. IMO bardzo przydatna opcja, nawet lepsza od zatrzymywaczy: taki komunikat to już bardzo duża podpowiedź co jest nie tak.
Taki, który czyta dobry tutorial i stosuje się do zaleceń Jednak dla początkujących lepszy będzie Code::Blocks bo można szybciej zacząć pisać
Albo za wcześnie zaczynają bawić się WinAPI czy jakąś biblioteką, gdzie okienka robi się „w kodzie” i również zadają głupie pytania. Czy te pytania są mniej głupie niż te „dotyczące” wyklinanych okienek, czy może należałoby sankcjonować dostęp do zaawansowanych bibliotek albo każda instrukcja do jakiejś biblioteki powinna zaczynać się nauką programowania? Na brak chęci do nauki raczej nie ma dobrego rozwiązania
Nie wiem jak w płatnych wersjach, ale w Express w Output wypisywane są załadowane i wyładowane moduły, rozpoczęte i zakończone wątki w raz z kodami wyjścia, wyrzucone wyjątki, kod wyjścia procesu, itp. Rzadko z tego korzystam, osobiście wolę podgląd na żywo
Ja, jeśli potrzebuję przytrzymać konsolę, to stawiam sobie breakpointa na klamrze zamykającej main, zwykle wystarcza
A i tak niektórzy nauczyciele każą dawać getchar() na końcu, serio :!:
W Visualu jak trafi mi się segfault to mi debugger pokazuje, w której linii nastąpił. IMO bardziej przydatna opcja A nawet jak błąd nie jest w linii wskazywanej przez debugger (najczęściej) to z pomocą stack-trace’u można zobaczyć, co się działo wcześniej 8)
Nie wiem jak w płatnych wersjach, ale w Express w Output wypisywane są załadowane i wyładowane moduły, rozpoczęte i zakończone wątki w raz z kodami wyjścia, wyrzucone wyjątki, kod wyjścia procesu, itp. Rzadko z tego korzystam, osobiście wolę podgląd na żywo :-D
To się nazywa debugowanie, każde IDE do C++ to posiada, nawet Dev-C++. Ale często się więcej dowiem z normalnego działania programu wypisując setki danych niż z debugowania, zwłaszcza jeśli algorytm jest bardziej skomplikowany.
A ja miałem w Visualu (omg kto taką nazwę wymyślił…) taki problem, że mimo błędu Segmentation Fault program wykrzaczył się dopiero przy printfie, chyba że przed wystąpieniem tego błędu było coś wypisywane.
Miałem takiego, jednak w samym zadaniu nie pisało nic o tym że mają być zatrzymywacze, więc ich po prostu nie robiłem. A że program mu się wyłączał, to jego sprawa, że nie uruchomił konsolowego programu w konsoli. Ach ci nauczyciele wychowani na Symfonii C++ i Borlandzie 3.1 używający Dev-C++, przepisujący na tablicę kod z książki dopowiadający “to powinno działać”, po czym zwykle nie działa… System nauczania informatyki w Polsce jest zacofany.
Wiem jak to się nazywa Raczej trudno by było znaleźć IDE bez debuggera, nie tylko do C++.
Hmmm…, ciekawe, jesteś pewny, że po segfaulcie program podziałał normalnie jeszcze chwilę? Może segfault następował w printfie a spowodowany był jakimś innym błędem :?:
Tak jestem pewien, o ile to można nazwać normalnym działaniem, bo nie było żadnej możliwości cokolwiek wyświetlić. Jeśli przed tym segfaultem wywołałem printfa, program nie wykrzaczał się. Usunąłem problem problem i było dobrze.
C++ nie jest językiem zarządzanym, więc mogą takie problemy występować. Jeśli wykroczysz poza tablicę, ale ta pamięć jest jeszcze w obrębie aplikacji, system może tego nie złapać. Tym bardziej że pracowałem na wskaźnikach do komórek tablicy, a nie tab_._
No chyba, że tak. Wiadomo jak pamięć należy do procesu to dla systemu wszystko jest w porządku. Pewnie nadpisałeś po prostu jakieś struktury biblioteki standardowej.