kategoria: ANSI C
[#91] Re: Wziąłem się za C# i potrzebuje pomocy

@strim, post #89

poprawna definicja funkcji main powinna zawierać argc i argv
Może zawierać, ale wcale nie musi. To jest tylko uniksowa naleciałość na język. W poprawnym programie w C może nie być w ogóle funkcji main().
[#92] Re: Wziąłem się za C# i potrzebuje pomocy

@Benedykt Dziubałtowski, post #88

Można pisać:
int a, b, c, d;
zamiast osobno. Kompilatorowi to różnicy nie robi, ale paluszkom owszem :)
Tak samo printf
Możesz pisać printf("wynik to:\n%d",wynik) a nie w dwóch linijkach i nadal będzie wyglądać ok, bo \n to znacznik przejścia do następnej linii - \t to o ile pamiętam był znacznik tabulatora, ale ostatnio coś robiłem i mi nie zadziałał jak trzeba ;) Kilka razy dasz w jednym printf \n to kilka linii zejdzie niżej, a że wyrzuca na ekran łańcuch znaków to traktuje \n jak znak specjalny i robi to w kolejności, czyli sekwencja printf("cosik \n\t cosik \n\t cosik"); będzie inaczej wyglądać niż printf("cosik \n\n cosik \t\t cosik");. Możesz też zmieniać kolor czcionki. link
Przy okazji - w console app jest inne kodowanie niż normalnie w windowsie i znaki diakrytyczne po prostu nie wskakują zazwyczaj jak trzeba.
[#93] Re: Wziąłem się za C# i potrzebuje pomocy

@abcdef, post #92

Możesz też zmieniać kolor czcionki.
W ten sposób robi się to tylko w konsoli tekstowej Windowsa, lub w MS-DOS jeżeli ktoś jeszcze używa. Dotyczy to również uwagi o "innych kodowaniach".
[#94] Re: Wziąłem się za C# i potrzebuje pomocy

@krashan_, post #93

Przecież pisałem o console app. Projekt benka to console app i jeszcze długo takie będzie robił więc doprecyzowanie może i przydatne, ale biorąc pod uwagę to o czym piszemy i dla kogo to nie jestem przekonany, że absolutnie potrzebne. Sporo wody w Wiśle upłynie zanim dojdzie do projektów z GUI (zakładając, że się gdzieś po drodze nie zniechęci i da radę crosscompilera skonfigurować do m68k - a potem testować np. na winuae z amigasys - szybciej, albo klasyku - wolniej, ale pewniej).
[#95] Re: Wziąłem się za C# i potrzebuje pomocy

@abcdef, post #94

Nie przesadzajmy z tym GUI. Jeśli to GUI pod AmigaOS, to robi się je bardzo prosto, i jak się przysiądzie, to sobie taki prosty kalkulatorek w oknie z przyciskami można wyskrobać od zera w jeden wieczór. No może dwa, bo uczymy się od zera.
Co do literatury, to ludzie się już wypowiadali, ale podam moje żelazne pozycje do nauki C:
1. AnsiC - Kernighan, Ritchie - moim zdaniem świetna pozycja, niezbyt gruba, prosty język, a po przeczytaniu samego wprowadzenia już coś tam można klepać
2. AmigaOS od środka. - Kołodziejczyk. Prosto napisane, z przykładami, trochę o execu, ale głównie o tworzeniu GUI z wykorzystaniem tego, co daje system 3.0/3.1 na dzień dobry plus reqtools.
3. Kurs C z MA - K. Iskra. Prawie to samo co poz. 2, równie prosto napisane, ale sam kurs jest obszerniejszy (np. jest o wykorzystaniu locale.library)
4. Kurs o programowaniu MUI na PPA - krashan. Fajnie napisane, można szybko nauczyć się wykorzystywać chyba najlepszy system GUI dla AMI - MUI.
Po zapoznaniu się z wymienionymi pozycjami można tworzyć naprawdę fajne programy w C dla AmigaOS, OS4, czy Morphosa. Co więcej, nie trzeba czytać wszytskiego od deski do deski - myślę, że po zapoznaniu się z 10% całości można już coś działać. Zresztą to chyba najlepszy sposób nauki programowania - przed komputerem, z otwartą obok książką.
[#96] Re: Wziąłem się za C# i potrzebuje pomocy

@wali7, post #95

@1 - K&R właśnie taki całkiem lekki i przystępny nie jest - w każdym razie na pierwsze zetknięcie z C. Natomiast pokazuje świetnie "how it works".
to sobie taki prosty kalkulatorek w oknie z przyciskami można wyskrobać od zera w jeden wieczór.

Można, ale trzeba najpierw opanować podstawy, jak wcześniej pisałem - zmienne, funkcje, zwracanie wartości, wskaźniki, alokacja pamięci i jej zwalnianie, struktury - jest tego trochę, a rzucanie się od razu na głębszą wodę może właśnie zniechęcić w przypadku braku progresu (błędy w funkcjonowaniu ze względu na niedostateczne zrozumienie "jak to działa").
[#97] Re: Wziąłem się za C# i potrzebuje pomocy

@abcdef, post #96

przesadzasz, ja uczyłem się wyłącznie z K&R i bardzo mi ta książka przypadła do gustu. Nie próbuje głaskać czytelnika obietnicami "jak zostać koderem w weekend", z przykładami typu x = a + b przez pół książki. A nie jest to jednocześnie jakaś hermetyczna cegła. Moim zdaniem przeciętnie inteligentny człowiek bez problemów przebrnie przez K&R.

A cóż trudnego jest w zrozumieniu jak działają funkcje w C? Jest procedura, jej argumenty, jakieś ciało funkcji i zmienne lokalne w środku, i zwrócenie danych przez return(). Wskaźniki to wygodna konstrukcja C pozwalająca na operowanie adresami w pamięci i tego co pod nimi siedzi bez używania Basicowych peek i poke. Ale przecież to to samo, tylko że prościej (język sam zajmie się np. właściwą interpretacją tego co siedzi pod danym adresem jako np. float, w basicu musiałbyś trochę się pobawić liczbami). Alokacja pamięci - wywołujesz, dostajesz wskaźnik albo zero. Coś tajemniczego? Struktury - to przecież kilka zmiennych spiętych jedną nazwą. Język robi wszystko za ciebie. A K&R przez wszystko prowadzi za rączkę. Zgadzam się z jednym - aby pisać w AmigaOS coś więcej niż hello world, trzeba rozumieć idee funkcji, wskaźników, i struktur. Ale przeciętny nastolatek pojmie to w 2 h.

PS. Ja zablokowałem się, gdy nie załapałem, że w C ważna jest wielkość liter. Nie tak jak w Basicu. Trochę frustracji kosztowało mnie odkrycie, że to co miało super działać wg mojego zdania, a wg. kompilatora sypało samymi errorami, zaczyna automagicznie działać, po zainteresowaniu się sprawą dużych i małych liter ;)

Ostatnia aktualizacja: 20.10.2012 11:46:28 przez wali7
[#98] Re: Wziąłem się za C# i potrzebuje pomocy

@wali7, post #97

"i zwrócenie danych przez return()"
Problem jest gdy chcesz zwrócić więcej niż 1 daną - wtedy już nie return, a np. wskaźniki.
"Ale przecież to to samo, tylko że prościej (język sam zajmie się np. właściwą interpretacją tego co siedzi pod danym adresem jako np. float, w basicu musiałbyś trochę się pobawić liczbami)"
Tak, ale chcąc zinkrementować wartość pod adresem 12567 a zinkrementować adres wyglądało zupełnie inaczej, w przypadku C wygląda to bardzo podobnie i może niedoświadczonym sprawiać dużo problemów. I tak jak piszesz - można przez to wszystko względnie szybko przebrnąć, ale... konkretnymi przykładami praktycznymi, a nie tłumaczeniem w książeczce.
Ja zablokowałem się, gdy nie załapałem, że w C ważna jest wielkość liter

A mnie dawno temu blokował borland c builder 6 i katalog projektu ze spacją w nazwie - kompilacja ok, linker error. I kilka niezaliczonych działających projektów pod rząd przez takie g****
Zdawałoby się, że w dwa tysiące którymś roku linker nie będzie miał ograniczeń rodem z DOS.
[#99] Re: Wziąłem się za C# i potrzebuje pomocy

@abcdef, post #98

Prawda. Ale do wszystkiego się dojdzie z czasem.
Ale takie GUI pod AmigaOS robi się prosto... chociaż upierdliwie, bo nie ma żadnego IDE do tego.
[#100] Re: Wziąłem się za C# i potrzebuje pomocy

@abcdef, post #98

Problem jest gdy chcesz zwrócić więcej niż 1 daną - wtedy już nie return, a np. wskaźniki.


Otóż to, ja miałem taki problem i jakoś nie mogłem trafić na takie zdanie w K&R :]. Fakt może chciałem za szybko, potrzebowałem programiku wiedziałem jak ma to działać a K&R potraktowałem sobie jak dokumentację. Ile to się nakombinowałem, gdyby nie podpowiedź Kraszana pewnie odgryzłbym sobie głowę :)



Ostatnia aktualizacja: 20.10.2012 12:58:31 przez ede
[#101] Re: Wziąłem się za C# i potrzebuje pomocy

@wali7, post #99

Sprawa IDE jest otwarta. Pomogły chociażby port Vima pod morphosa który jest w wersji max 6.3 pod niego. Amigaos 4 ma wersje 7.x . Którą można nieźle oskryptować i stworzyć potężne IDE. Oczywiście jest Scriba ale mu jeszcze wiele brakuje.
[#102] Re: Wziąłem się za C# i potrzebuje pomocy

@wali7, post #99

Ale takie GUI pod AmigaOS robi się prosto... chociaż upierdliwie, bo nie ma żadnego IDE do tego.


jak IDE to juz raczej wchodzimy w obiektowosc, w przypadku C to droga najczesciej w jedna strone.
[#103] Re: Wziąłem się za C# i potrzebuje pomocy

@sand, post #101

Pisanie pod Scribą to chyba dla hardkorowców, pewnie miałeś na myśli Scribble ;)
[#104] Re: Wziąłem się za C# i potrzebuje pomocy

@gx, post #102

nie za bardzo wiem co mają obiekty do IDE.
[#105] Re: Wziąłem się za C# i potrzebuje pomocy

@pampers, post #103

przepraszam :) oczywiście, że tak.
[#106] Re: Wziąłem się za C# i potrzebuje pomocy

@sand, post #104

tylko do jednego z elementow IDE zwiazanego z wizualnym kreowaniem GUI, bo o tym myslalem.
[#107] Re: Wziąłem się za C# i potrzebuje pomocy

@gx, post #102

Masz rację, tym bardziej, że też myślałem konkretnie o wizualnym kreowaniu GUI, ale na upartego, można nie korzystać z tej obiektowości.
... ale jakieś tam kreatory GUI by się przydały, nawet chyba coś na Aminecie jest, ale to są jakieś proste wspomagacze
[#108] Re: Wziąłem się za C# i potrzebuje pomocy

@gx, post #102

Aż się uśmiechnąłem, w końcu wyszło, że jednak programowanie obiektowe do czegoś by się przydało ;), miło to słyszeć na forum, gdzie nie cieszy się ono popularnością - sorry za uszczypliwość ;).

Stwierdzenie o zastosowaniu "obiektówki", kolega podał pewnie wiedziony intuicja, coś większego + skomplikowanego = programowanie obiektowe, ale nie do końca to prawda, bo generator gui, czy też IDE tak jak wszystko można napisać strukturalnie ;), przykładem niech będzie GTK. Ale to tylko przykład, że można. Bo faktycznie uważam, że intuicja kolegi nie zawodzi ;).
[#109] Re: Wziąłem się za C# i potrzebuje pomocy

@tygrysekHD, post #108

przykładem niech będzie GTK


masz na mysli Glade, bo tylko takie/podobne rozwiazanie oddziela warstwe wizualna od logicznej tzn. jest dalej reedytowalny wizualnie...
[#110] Re: Wziąłem się za C# i potrzebuje pomocy

@gx, post #109

Dokładnie tak.

Co do oddzielenia warstw, np. warstwa aplikacji i warstwa prezentacji, to nie zależy od narzędzi (chociaż odpowiednie pewnie pomagają), a od projektu - w sensie zaplanowania sposobu działania aplikacji itd.
[#111] Re: Wziąłem się za C# i potrzebuje pomocy

@gx, post #109

Glade nic nie oddziela...
jeśli sam nie zadbasz o zrobienie kodu w modelu MVC (Model - View - Controler) jak to np robi XCode ma Macku to masz tylko namiastkę a nie oddzielenie.
A tak przy okazji... Obiektowość skumałem dopiero jak się uczyłem Javy kilka lat temu (wspomniałem o tym wcześniej). PAtrząc teraz na MUI w połączeniu z czystym C to ta obiektowość to raczej nie jest dla początkujących programistów C. Bo:
- jak wytłumaczyć komuś zaczynającemu programować w C co to są metody, dziedziczenie itp, itd a potem powiedzieć żeby zamiast w C++, Javie, C# albo nawet w Objective-C (gdzie takie rzeczy robi się z poziomu skłądni języka) zrobił to w C gdzie robi się to przekazując masę wskaźników jako parametry funkcji typu: "dodaj metodę"
ci co kodują MUI to wiedzą że to ma sens (ba tak naprawdę pod spodem tak działają RunTime'y c++, Objective-C czy innej Javy), ale myślę że początkującemu może zająć trochę czasu zanim skuma o co chodzi...

pisząc to znowu się powtórzę, ale co tam...

@Benek
Naucz się czystego C. Napisz coś prostego ale tak od końca do końca... potem ucz się stopniowo wykorzystywać biblioteki, naucz się "utrzymywać" (ang. maintanace) kod tzn robić i zarządzać i wydawać poprawki,
pisz, pytaj, googluj... nie ma lepszego sposobu.

i na koniec: linka komend i jeszcze raz linia komend - inaczej nie zrozumiesz co się dzieje podczas kompilowania, linkowania.

btw: fajny temat poruszyłeś.
[#112] Re: Wziąłem się za C# i potrzebuje pomocy

@carrion, post #111

zrobił to w C gdzie robi się to przekazując masę wskaźników jako parametry funkcji typu: "dodaj metodę"

Gdy używa się BOOPSI to taka funkcja jest niepotrzebna. A jeżeli mówimy o AmigaOS (czy klonach), języku C i programowaniu obiektowym, to BOOPSI jest narzucającym się rozwiązaniem, tym bardziej, że MUI bazuje na nim.
[#113] Re: Wziąłem się za C# i potrzebuje pomocy

@krashan_, post #112

Jak mówimy o programowaniu obiektowym w kontekście amigi, to ja powiedział bym, że MUI jest tym co przeszkadza i zmusza do programowania strukturalnego, albo przynajmniej mieszania programowania strukturalnego z obiektowym, co do najlepszych praktyk nie należy ;), chociaż przez metodologię (dobre praktyki, czy jak to zwał) jest dopuszczalne w określonych warunkach ;).

Powoduje to, że nauka programowania obiektowego z użycie GUI na amidze, będzie trudne bo nie ma takowego GUI - a jeżeli istnieje to chętnie o nim poczytam.

MUI czy też BOOPSI - czy to są "systemy" obiektowe? Ja bym powiedział, że raczej nie, a patrząc na zarządzanie tym od strony programistycznej, czyli języka programowania - to na pewno nie.
[#114] Re: Wziąłem się za C# i potrzebuje pomocy

@tygrysekHD, post #113

właśnie o to mi chodziło!!!

z obiektowością to te systemy mają tyle wspólnego co ja z drogimi samochodoami.... kiedyś stałem obok ferrari i mam zdjęcie... ;)
a serio wszyscy kodujący chyba rozumieją na czym polega prawdziwia obiektowość i boopsi (w przypadku tego pierwszego mamy to jako dobrodziejstwo języka i runtime'a, w przypadku tego drugiego udajemy/emulujemy to w C (a jak niektórzy mówię - C to tylko taki makro processor dla assemblera ;) )
tak czy tak.... niech Benek i inni nowi Amiganci się uczy/się uczą ANSI C ze zrozumieniem. Potem pogadamy o BOOPSI.
[#115] Re: Wziąłem się za C# i potrzebuje pomocy

@carrion, post #114

Robi się coraz ciekawiej. Lubię rzeczowe dyskusje, zawsze się czegoś dowiem. OK
[#116] Re: Wziąłem się za C# i potrzebuje pomocy

@carrion, post #114

kiedyś stałem obok ferrari

Obok programowania obiektowego też chyba kiedyś stałeś razem z tygryskiemHD, ale raczej nie za blisko... Walicie panowie takie farmazony, że ręce opadają z szelestem. Może zacznijcie od definicji programowania obiektowego na Wikipedii chociażby. Nie jest wcale powiedziane, że do obiektowego programowania jest potrzebne wsparcie ze strony języka programowania, a tym bardziej językiem tym nie musi być C++.

BOOPSI (sama nazwa mówi Basic Object Oriented Programming System for Intuition) to szkielet obiektowy dostarczany przez system operacyjny, pozwalający na programowanie obiektowe w dowolnym języku. Pochodzi z lat 1990-91, kiedy C++ było w głębokich powijakach (pierwszy standard języka C++ jest z 1998 roku). BOOPSI dostarcza pojęcia klasy, obiektu, metody i atrybutu. Pozwala na stosowanie metod wirtualnych, klas abstrakcyjnych, dziedziczenia i polimorfizmu. MUI ściśle bazuje na BOOPSI, wszystkie gadżety (jak również szereg obiektów pomocniczych, nie reprezentowanych bezpośrednio na ekranie) to obiekty określonych klas. Operuje się nimi wykonując na nich metody i manipulując ich atrybutami. Jeżeli to nie jest programowanie obiektowe, to chyba żyjecie w informatyce równoległej.
[#117] Re: Wziąłem się za C# i potrzebuje pomocy

@tygrysekHD, post #113

MUI czy też BOOPSI - czy to są "systemy" obiektowe? Ja bym powiedział, że raczej nie

Nie wiesz o czym piszesz, niestety. Napisałeś chociaż pół programu z użyciem MUI? Budując aplikację w MUI tworzysz obiekty. Następnie wykonujesz na nich metody. Ustawiasz i pobierasz atrybuty obiektów. Obiekty tworzysz za pomocą konstruktorów, a usuwasz wywołując destruktory. Mówi Ci to coś?
[#118] Re: Wziąłem się za C# i potrzebuje pomocy

@krashan_, post #117

:) spokojnie i bez nerwów.

Może nie znam się na MUI za dobrze, parę prób poczyniłem zarówno z BOOPSI i jak i z MUI i
stwierdzam, że nie da się tego programować w C++ z wykorzystaniem tego co daje C++ tzn. np. zapisu: class moja_klasa : public clasa_boopsi { ... } i oto nam głównie chodzi, że to obiektowość bez "wsparcia" ;). Oczywiście MUI i BOOPSI takie dziedziczenie zrobi jednak zapis tego odbywa się w języku strukturalnym. Na dzień dzisiejszy nie ma biblioteki - wrapper'a, który by pozwalał załatwić to stricte obiektowo, przynajmniej nic o tym nie wiem.
Taki sposób programowania ma wiele wad, np. nie ma żadnej kontroli ilości, typów itd. argumentów, które przekazuje do metody obiektu.
Mówisz, że jest polimorfizm? I tutaj nie podyskutuję, bo pewnie za słabo znam MUI, ale z Twoich artykułów tak bym nie wywnioskował, może czegoś jednak nie doczytałem.

Reasumując, w kontekście nauki programowania, to jest to masakra - poplątanie z pomieszaniem.
[#119] Re: Wziąłem się za C# i potrzebuje pomocy

@tygrysekHD, post #118

stwierdzam, że nie da się tego programować w C++ z wykorzystaniem tego co daje C++

To już lepiej... Co prawda to zdanie fałszywe, ale istotnie, programowanie MUI w C++ wymaga trochę wysiłku. Zauważę tylko po raz kolejny, że obiektowość nie zaczyna się, ani nie kończy na C++. Żeby połączyć C++ z BOOPSI trzeba napisać wrappery.

przynajmniej nic o tym nie wiem

Istnieje taki projekt.

Na dzień dzisiejszy nie ma biblioteki - wrapper'a, który by pozwalał załatwić to stricte obiektowo

Programowanie obiektowe to nie to samo co obiektowy język programowania. Cały czas traktujesz te pojęcia mylnie jako równoważne. Można programować obiektowo w języku tylko strukturalnym, można programować strukturalnie w języku obiektowym.

Ostatnia aktualizacja: 23.10.2012 21:13:38 przez krashan_
[#120] Re: Wziąłem się za C# i potrzebuje pomocy

@carrion, post #111

Glade nic nie oddziela...


jak nie oddziela, a ten plik .xml opisujacy wyglad itd... to nie oddziela wygladu od kodu, mozna potem go zawsze zmieniac, bez ingerowania w kod ?.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem