Język ANSI C a C++, który będzie najlepszy?


(Probena67) #1

Witam. Nie pytam o to którego się szybciej nauczę, tylko który jest łatwiej się nauczyć, w poprzednim temacie pisałem o C i uczyłem się z kursu (http://pl.wikibooks.org/wiki/C#C_dla_po ... .C4.85cych) jednak przeczytałem już pare stron i dosyć dużo nie rozumiem. Autor tego kursu nie wyjaśnia wszystkiego doszczętnie jasno, niektóre rzeczy wyskakują jak filip z konopi. Albo jak napisał "Nasuwa się pytanie: "czy będzie błędem nazwanie tą samą nazwą zmiennej globalnej i lokalnej?""... w ogóle nie wiem o czym gościu mówi a mi sie ma jakieś pytanie nasuwać?;D

Troszkę mi się nie podoba kurs bo najlepiej się uczy na pracy, czyli np. zrób \n i zobacz co ci wyjdzie itp. tutaj takiego czegoś nie ma, jest 8 stron tłumaczenia potem ćwiczenia, jak już mam totalne masło maślane w głowie. W ogóle w C jak coś piszę to wszystko powstaje w rejestrze, a na poniższym filmiku coś już powstaje(program).

Język C++ przy zakupie książki "symfonia C++" chyba by mi lepiej wchodził?

Mam zainstalowany Microsoft Visual C++ i bawiłem się nim:

http://komputery.spryciarze.pl/zobacz/j ... -textbox-a

Czy mógłby mi ktoś powiedzieć czy to co jest przedstawione na filmiku to jest właśnie ten C++, bo ja myślałem że to wszystko się pisze od podstaw w kompilatorze, a nie wykorzystuje się do tego żadnego programu(po prostu graficzne budowanie programu) jakim jest Visual C++??

Czy nie sądzicie że lepszym rozwiązaniem byłoby kupienie "symfoni C++" Grębosza? Bo to będzie i lepszy język, i więcej tutoriali na necie, lepiej wytłumaczone(mam nadzieję) i szczaję od razu C++ i później ew. mogę przejść do nauki C...? Jeśli przy czytaniu symfonii dalej bym nie rozumiał, to mogę wziąść "korki" z tego? Jak uważacie czy to jest dobry pomysł? :wink: A od jakich języków wy zaczynaliście swoją przygodę?


([alex]) #2

C++ jest rozszerzeniem C więc na pewno łatwiej nauczyć się C.


(Probena67) #3

Ok, tylko kurs mi nie odpowiada, czytałem książke "język ANSI C" i już na początku pisali że wymagana jest podstawowa znajomość takich rzeczy jak funkcje, zmienne itp. a ja tego nie znam :wink:. Gdzie mogę znaleźć jakiś podręcznik, e-book o "wstępie do programowania"?

Potem ew. jeśli załapie zacznę od ANSI C :slight_smile:


(Razi) #4

C, a C++ to prawie to samo.

Prawie robi wielką różnicę, bo C++ wprowadza klasy, szablony, bool, strumienie, referencje, STL, kontenery....

Nic nie stoi na przeszkodzie nauki C++, a potem C. Ja się najpierw C++ nauczyłem i strumieni, a potem dopiero się nauczyłem używania stdio i printf/scanf


(Xeon Bloomfield) #5

Również polecam kolejność C++ , a następnie C.


(Sawyer47) #6

C jest mniej więcej podzbiorem C++, więc siłą rzeczy łatwiej nauczyć się C. Kwestia tylko posiadania dobrych materiałów do nauki. Ogólnie wydaje mi się, że lepiej zainwestować w jakąś dobrą książkę dla początkujących. Dla C++ może to być np. Symfonia C++, dla C np. "Język C. Szkoła programowania".

Można sobie układać interfejs graficzny dla różnych bibliotek interfejsu graficznego za pomocą odpowiednich programów, ale i tak trzeba go zaprogramować, więc trzeba mieć pojęcie jak dana biblioteka działa. Kod pisze się w edytorze tekstowym, a kompiluje kompilatorem. Powszechnie używa się IDE (Zintegrowane środowisko programistyczne, ang. Integrated Development Environment) do programowania, które integrują w sobie edytor tekstu, kompilator, linker, debuger, być może również wspomniane programy do projektowania interfejsu graficznego itp. itd. – i takim IDE jest dla przykładu Visual C++.

?


(Probena67) #7

Hmm, ok w takim razie w przyszłym tygodniu dojdzie do mnie "Symfonia C++" Grębosza i z niecierpliwością będę na nią oczekiwać ;p.

Póki co mam pytanie, bo np. w jednej książce podano kod do pierwszego programu taki:

#include 

main()

{

    cout << "Hello World" ;

}

i mi takiego kodu nie przyjeło w CodeBlock'erze. A sam kod jaki był już w programie wyglądał tak:

#include 


using namespace std;


int main()

{

    cout << "Hello world!" << endl;

    return 0;

}

I mam pytanie, dlaczego te kody się różnią? Różnią się tym:

Biblioteka w programowym kodzie nie ma zakończenia .h

Przed funkcją main występuje int? :shock:

Instrukcja cout jest w programowym kodzie zakończona na "<< endl;" :shock:

Są dwa słowa w programowym kodzie których nie ma w kursie a mianowicie : "using namespace std;" i "return 0;"


(Xeon Bloomfield) #8

using namespace std; = std::cout = cout & std::endl = endl.

iostream.h = iostream (oszczędzanie klawiatury).

"int" musi być!

Przez to, że jest to funkcja typu liczby naturalnej zwraca więc ją = "return 0;".


(Sawyer47) #9

Kwestia z jakiego okresu pochodzi dany kod. C++ ewoluował od 1979 (za Wikipedią), obecnie obowiązujący standard pochodzi z 2003 roku. Pierwszy kod, który podałeś pochodzi prawdodpodobnie jeszcze z czasów sprzed pierwszej wersji standardu (1998). Dziś tylko drugi kod jest poprawny, tzn. musisz jawnie określić tym zwracany main i musi być to int (możesz się spotkać z przykładami kodów, gdzie występuje void main - to również już niepoprawne), a pliki nagłówkowe biblioteki standardowej nie mają żadnych końcówek .h.


(Xeon Bloomfield) #10

Postęp jest wszędzie to w branży IT widać to najlepiej.

nr47 przytoczył dobre uzasadnienie tych różnic.

Wszystko przystosowuje się i postępuje z biegiem czasu.

Języki programowania ewoluują do bardziej przystępnych, komfortowych i użyteczniejszych.


(Probena67) #11

Ok, z tego co czytałem to "symfonia C++" nie jest za młodą książką, dlatego moglibyście mi podać jakies strony na których są wytłumaczone funkcje, instrukcje, kiedy się ich używa i do czego?


(Sawyer47) #12

Najnowsze wydanie Symfonii C++ opisuje najnowszą wersję standardu, więc nie powinno być problemu.

Strony gdzie są opisy biblioteki standardowej:

http://www.cppreference.com/wiki/

http://www.cplusplus.com/reference/


(Probena67) #13

Hmm czyli

using namespace std;, endl, \n

to jest to samo? Czyli enter? :stuck_out_tongue:


(Sawyer47) #14

W bibliotece standardowej wszelkie nazwy znajdują się w przestrzeni nazw std, a więc trzeba się do nich odwoływał poprzedzają je std::.

using namespcae std sprawia, że nazwy z przestrzenia nazw std obowiązują w danym zasięgu i nie trzeba ich dodatkowo poprzedzać nazwą przestrzeni nazw

Nie wgłębiając się w szczegóły endl jest równoważny wprowadzeniu do strumienia '\n' i flush.


(somekind) #15

@nr47 - nie sądzę, żeby ten post cokolwiek wyjaśnił początkującemu. :wink:


(Probena67) #16

Tylko tyle zrozumiałem :p. Mam jeszcze 2 kolejne pytania:

  1. Dlaczego C++ można wykorzystac w CodeBlocks i Visual C++, przeciez w CodeBlocks wszystko się pisze od podstaw, a w Visual C++ połowę kodu robi za nas program :shock:

  2. Czym się różni zmienna od instrukcji? Dlaczego int jest zmienną a cout jest już instrukcją(tylko prosze prosto i po polsku ;p)?


(Marcin Obala) #17
  1. C++ pisz od podstaw :wink: w C++ jest lepiej według mnie.

  2. Instrukcja to jest po prostu coś innego niż zmienna :wink: zmienna to takie pudełko(komórka/i pamięci), w którym jest coś zapisane, liczba, tekst, obiekt lub inne. A instrukcja to po prostu coś się dzieje.


(Sawyer47) #18

Zmienna zajmuje jakieś miejsce w pamięci (a więc są to dane w pamięci), instrukcja to operacja na tych danych, którą wykonuje procesor.

Nie do końca rozumiem jak to się ma do pierwszej części pytania. int to typ całkowitoliczbowy, można tworzyć zmienne tego typu (takle zmienne mają określony rozmiar i operacje jakie można na nich wykonać). Natomiast cout to zmienna pewnego typu. Definiowana jest przez bibliotekę standardową (znajduje się w pliku iostream) – wykonując na niej różne operacje można pisać na standardowe wyjście programu (czyli zazwyczaj ekran komputera).


(Probena67) #19

Marcin511 dzieki :wink: Prosto i zrozumiale. Tylko

W C++ jest lepiej w sensie że w Visual C++ tak?


(Marcin Obala) #20

Nie :wink: Ja np. nie porywałbym się na pisanie od podstaw w C#. Tam generuje mi automatycznie kod początkowy i ok. Ale w C++ lepiej według mnie od podstaw pisać, chyba nie dużo czasu zajmuje napisanie dwóch include, using namespace, int main(){} :wink:? Z tego co kojarzę to visual automatycznie dodaje stdafx.cpp czy tam coś.