Programowanie w języku C/C++

Składnia

Ten artykuł wymaga dopracowania!

Jeżeli możesz popraw ten artykuł według zaleceń, które możesz znaleźć na stronie Artykuły do poprawy. Po dopracowaniu tego tekstu można usunąć ten komunikat.


Ogólnie uważa się, że C++ jest mało czytelnym językiem programowania, ponieważ zamiast operować bardziej zrozumiałych instrukcjach (jak jest to w Pascalu) operujemy tutaj krótkimi sekwencjami znaków, lub zazwyczaj po prostu pojedyńczymi znakami.
Ma to jednak wiele zalet - kod jest pisany szybciej, zamiast np. Inc(zmienna) znanego z Pascala, wystarczy napisać zmienna++. Zwiększa to również szybkość czytania kodu. Niektóre znaki mają wiele zastosowań - np. preinkrementację zmiennej zmienna oznacza się ++zmienna, a jej postinkrementację zmienna++. Nie trzeba zapamiętywać dodatkowego słowa kluczowego, wystarczy zapamiętać, czy "plusy" pisze się z lewej, czy prawej strony.

Bloki kodu


Pierwszą rzeczą jaką trzeba wiedzieć o składni C++ to to, że ma ona strukturę blokową, tzn. jest podzielona na bloki. Blok kodu zawiera się pomiędzy nawiasami klamrowymi (odpowiedniki pascalowych begin i end), w skrócie - klamrami:

{              // otwarcie bloku kodu
  int x = 5;   // instrukcja wewnątrz niego
}


Przed klamrą otwierającą bardzo często stoi jakieś słowo kluczowe opisujące zasady wykonywania tego bloku. Przykładem bloku mogą być funkcje, instrukcje warunkowe, pętle:

int main()
{
  // blok kodu
}


if(x==5)
{
  // blok kodu
}


while(x>0)
{
  // blok kodu
}


Nie oznacza to jednak, że blok zawsze musi być powiązany z taką konstrukcją. Poniższy fragment jest jak najbardziej poprawny1) :

int x = 5;
x = 10;
{
  int a = 2;
  x *= a;
  ++x;
}
x -= 5;


Łańcuchy znaków


Łańcuchy znaków w języku C++ opisujemy za pomocą dwóch znaków cudzysłowia:

"Ala ma kota"

W przypadku gdy chcemy opisać pojedyńczy znak uzywamy znaków apostrofu:

'A'

Warto pamiętać, że tzw. Escape_sequences są traktowane jako pojedyńcze znaki! Jeżeli pomiędzy znakami apostrofu wpiszemy więcej niż jeden znak to kompilator może zwrócić błąd.2)

Należy pamiętać, że kompilator zawsze na końcu łańcucha znaków doda znak kończący łańcuch, tzw. terminator czyli znak o kodzie ASCII zero - NULL, '\0'. Stad wynika, że zapisy 'A' i "A" nie są równoznaczne! Pierwszy zapis 'A' oznacza pojedyńczą wartość typu char zawierającą ową literę [A], drugi zaś - typu char*, zawierającą ciąg znaków [A\0].

Łańcuchy znaków mogą być dla zwiększenia czytelności kodu rozdzielone:

"Ala"
" ma kota"


Kompilator scali taki rozdzielony łańcuch i w rezultacie uzyskamy:

"Ala ma kota"


Dodatkowe informacje: String, Escape_sequences

Komentarze


W języku C++, jak w prawie każdym języku programowania, istnieją komentarze. Służą one, do komentowania, opisywania kodu. Zostawianie w kodzie komentarzy jest dobrą praktyką, ponieważ jeśli po miesiącu, czy trzech wrócisz do pisania jakiegoś programu, to jest bardzo prawdopodobne, że nie wiele z niego bedziesz pamietać. Komentarze pozwolą ci szybciej sobie przypomnieć na jakich zasadach działa, uwolnią cię od większości żmudnej analizy tego co sie dzieje w kodzie. Pomogą także innym osobom które być może będą czytały ten program. Dla samego programu, komentarze są jak powietrze - kompilator całkowicie pomija je przy kompilacji kodu. Oznacza to, że format komentarzy jest uzależniony tylko od uznania osoby piszącej program.

W C++ istnieją dwa typy komentarzy: jedno- i wielolinijkowe. Jednoliniowe, nazywane w skrócie liniowymi, rozpoczynają się znakami "//" i trwają zawsze nieprzerwanie aż do końca bieżącej linii. Wieloliniowe, nazywane z kolei blokowymi, rozpoczynają się znakami "/*", a kończą "*/". Przykładowo:

to jest poza komentarzem // to jest w komentarzy liniowym
 
to jest poza komentarzem /* to jest
komentarz 
blokowy */ a to tez jest poza komentarzem


Komentarze często stosuje się także, aby tymczasowo wyłączyć jakiś fragment kodu, np.:

int x = 5;
// x *= 2;
x += 5;
x /= /* 2;
x -= */ 5;
++x;


Warto zwrócić uwagę na powyższe użycie komentarza blokowego. Podczas analizy kodu, komentarz zawsze ma pierwszeństwo. Nie ważne że jest średnik, że jest nowa linia, że rozpoczyna się nowa instrukcja. Wszystko objęte komentarzem jest dosłownie wycinane z kodu. Ignorowane i kropka. Powyższy kod, tak na prawdę jest równoważny:

int x = 5;
x += 5;
x /=  5;
++x;


1) Jakkolwiek może się to wydawać dziwne, nadmiarowe i nie potrzebne, jest to jednak czasem stosowane. Bloki służą bowiem także do zawężania czasu życia zmiennych (ang. scope), co powoduje, że prezentowane powyżej wtrącenie bloku ma jednak pewne zauważalne efekty uboczne. Scoping to jest jednak na tyle rozległy temat, że wypełniłby kolejny artykuł - w tym miejscu dość powiedzieć, że z wtrąconym powyżej blokiem, w linijce "x-=5", zmienna "a" juz nie istnieje i nie można już tam napisać np. "x-=a".

2) Nie jest to jednak zachowanie obowiązkowe i dość często kompilatory pozwalają umieszczać do czterech znaków, np. '0123'. Mimo prostoty, jest to jednak konstrukcja dla zaawansowanych programistów, i bynajmniej nie jest to łańcuch znaków. Jest to tekstowa reprezentacja liczby 0x30313233 (808530483) lub 0x33323130 (858927408) - zależnie od tego w jakim modelu pamięci pracuje procesor (Little endian/Big endian).


Zobacz też:

2 komentarze

Alver1989 2016-12-09 20:34

This post was very nicely written.
https://www.rebelmouse.com/watchdoctorstrangeonline/
https://www.rebelmouse.com/watchtheaccountantonline/
https://www.rebelmouse.com/watchsplitonline/
https://www.rebelmouse.com/watchmanchesterbytheseaonline/
https://www.rebelmouse.com/watchthefounderonline/
https://www.rebelmouse.com/watchjackreacher2nevergoback/
https://www.rebelmouse.com/watchmoanaonline/
https://www.rebelmouse.com/watchacureforwellnessonline/
https://www.rebelmouse.com/watchunderworldbloodwarsonline/
https://www.rebelmouse.com/residentevilthefinalchapter/
https://www.rebelmouse.com/watchthespacebetweenusonline/
https://www.rebelmouse.com/watchlalalandonline/
https://www.rebelmouse.com/watchpassengersonline/
https://www.rebelmouse.com/watchtulipfeveronline/
https://www.rebelmouse.com/billylynnslonghalftimewalk/
https://www.rebelmouse.com/fantasticbeastswheretofindthem/
https://www.rebelmouse.com/watcharrivalonline/
https://www.rebelmouse.com/watchgoldonline/
https://www.rebelmouse.com/watchxxxreturnofxandercage/
https://www.rebelmouse.com/watchthegirlonthetrainonline/
https://www.rebelmouse.com/watchtheedgeofseventeenonline/
https://www.rebelmouse.com/watchsingonline/
https://www.rebelmouse.com/watchfiftyshadesdarkeronline/
https://www.rebelmouse.com/watchjohnwickchapter2online/
https://www.rebelmouse.com/watchthegreatwallonline/
https://www.rebelmouse.com/watchrogueoneonline/
https://www.rebelmouse.com/watchassassinscreedonline/
https://www.rebelmouse.com/watchloganonline/
https://www.rebelmouse.com/watchthelegobatmanmovieonline/
https://www.rebelmouse.com/watchcollateralbeautyonline/
https://www.rebelmouse.com/watchinfernoonline/
https://www.rebelmouse.com/watchadogspurposeonline/
https://www.rebelmouse.com/watchaunitedkingdomonline/
https://www.rebelmouse.com/watchamonstercallsonline/
https://www.rebelmouse.com/watchtrollsonline/
I am happy when reading your blog

Alver1989 2016-11-24 12:00

Thanks for sharing wonderful blogs.
http://www.screencast.com/t/2efF85Ms2n
http://www.screencast.com/t/NyE7NoERBy
https://www.rebelmouse.com/watchthefounderonline/
http://www.screencast.com/t/SVjGmcLLX
http://www.screencast.com/t/PSjwLZbKOc1
http://www.screencast.com/t/iNn1aJXcF0n
http://www.screencast.com/t/ldNWSyFG
http://www.screencast.com/t/FgvTI0GD
https://www.rebelmouse.com/watchthespacebetweenusonline/
https://www.rebelmouse.com/watchlightbetweenoceansonline/
http://www.screencast.com/t/XwOJNrkZ
https://www.rebelmouse.com/billylynnslonghalftimewalk/
http://www.screencast.com/t/F1BzpXMHCyN
https://www.rebelmouse.com/watchassassinscreedonline/
http://www.screencast.com/t/1fHBAqWs0r
http://www.screencast.com/t/jVHesf54bHHN
http://www.screencast.com/t/Q9rdMbcfG
http://www.screencast.com/t/7UkINEIM
http://www.screencast.com/t/ow8xOPQfk
https://www.rebelmouse.com/watchsnowdenonline/
http://www.screencast.com/t/s3c6xEHZ6oUg
https://www.rebelmouse.com/watchtheaccountantonline/
https://www.rebelmouse.com/watcharrivalonline/
http://www.screencast.com/t/jgUqS66GrdTT
https://www.rebelmouse.com/watchsingonline/
https://www.rebelmouse.com/watchinfernoonline/
http://www.screencast.com/t/Gn7s9p38MZu8
https://www.rebelmouse.com/watchrogueoneonline/
http://www.screencast.com/t/IxEXO6gGa
http://www.screencast.com/t/9RdJ3GVXGJ
http://www.screencast.com/t/sKEbBNowk0
https://www.rebelmouse.com/watchmanchesterbytheseaonline/
https://www.rebelmouse.com/watchgoldonline/
https://www.rebelmouse.com/watchbenhuronline/
https://www.rebelmouse.com/watchthegirlonthetrainonline/
http://www.screencast.com/t/OC6sjQDO4z
https://www.rebelmouse.com/watchdoctorstrangeonline/
https://www.rebelmouse.com/watchcollateralbeautyonline/
http://www.screencast.com/t/CoSk1Te3iHaW
http://www.screencast.com/t/FE4AZHDmex
https://www.rebelmouse.com/watchthemagnificentsevenonline/
https://www.rebelmouse.com/watchwardogsonline/
https://www.rebelmouse.com/watchpetesdragononline/
http://www.screencast.com/t/pSNHgWlTNzO3
https://www.rebelmouse.com/watchlalalandonline/
http://www.screencast.com/t/P3GEHY1k1
https://www.rebelmouse.com/watchpassengersonline/
http://www.screencast.com/t/7MMsycCfl
https://www.rebelmouse.com/watchsausagepartyonline/
http://www.screencast.com/t/lTRAdwj7Ovh
http://www.screencast.com/t/xyi8sAqIz
http://www.screencast.com/t/LvlwwYCCL
https://www.rebelmouse.com/watchspectralonline/
http://www.screencast.com/t/Xzn8hchmDlN
https://www.rebelmouse.com/watchmechanic2resurrection/
http://www.screencast.com/t/DNnrfBJ0KHZ
http://www.screencast.com/t/FmhFpFV0X
http://www.screencast.com/t/u0x27OXeTknJ
https://www.rebelmouse.com/watchamonstercallsonline/
http://www.screencast.com/t/FyuCVgiK9C
https://www.rebelmouse.com/watchdeepwaterhorizononline/
https://www.rebelmouse.com/missperegrinespeculiarchildren/
https://www.rebelmouse.com/watchmoanaonline/
https://www.rebelmouse.com/watchtrollsonline/
http://www.screencast.com/t/R49jBRCbfvxv
http://www.screencast.com/t/ZHL1LOhjI9
https://www.rebelmouse.com/watchstorksonline/
https://www.rebelmouse.com/fantasticbeastswheretofindthem/
https://www.rebelmouse.com/watchjackreacher2nevergoback/
https://www.rebelmouse.com/watchkuboandtwostringsonline/
https://www.rebelmouse.com/watchflorencefosterjenkins/
https://www.rebelmouse.com/watchtheedgeofseventeenonline/
Thanks for sharing wonderful blogs.