Artykuły do poprawy

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ż: