Struktura programu C/C++


Ogólna struktura programu w C++ (generowana zwykle automatycznie przy tworzeniu projektu przez kompilator) składa się z kilku części przedstawionych poniżej:


Część I - biblioteki


Ta część programu opisuje biblioteki jakie mają być dołączone do programu. Biblioteki to pliki, których zawartość jest dołączana do programu za pomocą dyrektywy preprocesora #include. Biblioteka to plik o nazwie podanej w nawiasie " < nazwa biblioteki > ", który posiada między innymi definicje przydatnych funkcji.

Użycie funkcji pierwiastkującej zdefiniowanej w bibliotece cmath

  1. #include <cstdlib>
  2. #include <iostream>
  3. //dodanie biblioteki cmath, w której znajduje się
  4. //definicja funkcji pierwiastkującej sqrt
  5. #include <cmath>
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11.  
  12. //użycie funkcji sqrt wyznaczającej pierwiastek z liczby 2
  13. cout<<sqrt(2)<<endl;
  14.  
  15.  
  16. return 0;
  17. }


Np. biblioteka cstdlib zawiera funkcje ogólne takie jak konwersje, alokacja pamięci czy funkcje matematyczne. Biblioteka iostream (input/output stream) jest standardową biblioteką wejścia/wyjścia w C++. Jeśli chcemy coś wyświetlać na ekranie (za pomocą obiektu cout i przeciążonego operatora "<<"), lub pobierać dane z klawiatury (za pomocą obiektu cin i przeciążonego operatora ">>") musimy ją dodać do nagłówka programu.

Wcześniejsze wersje bibliotek miały rozszerzenie "*.h". Język C++ odchodzi od takiego nazewnictwa, gdyż pliki z tym rozszerzeniem były początkowo wykorzystywane w języku C (oczywiście C++ może nadal korzystać z tych bibliotek) i dla rozdzielenia bibliotek kojarzących się z danym językiem, C++ przyjął nazwy bez rozszerzenia. Niektóre biblioteki zostały przekształcone z C na C++, i w takich przypadkach pozbyto się rozszerzenia, ale dodano literkę "c" na początku takiego pliku np.:

stara nazwa pliku nowa nazwa pliku math.h ---> cmath stdlib.h ---> cstdlib

Część II - przestrzenie nazw

Dyrektywę using namespace musimy użyć w przypadku, gdy zamiast pliku iostream.h, będziemy używać iostream, w celu udostępnienia definicji zawartej w tym pliku. Generalnie chodzi o to, żeby nie pisać za każdym razem wywołanie obiektu cout czy cin z przedrostkiem std::. Np.:

  1. #include<iostream>
  2. #include<cstdlib>
  3.  
  4. int main()
  5. {
  6.  
  7. //bez użycia dyrektywy using namespace std musimy
  8. //do każdej definicji z biblioteki
  9. //iostream dodać przedrostek std::
  10.  
  11. std::cout<<"Ala ma kota"<<std::endl;
  12.  
  13. return 0;
  14. }


Wyobraźmy sobie, że mamy dwa pakiety, w których zdefiniowana jest funkcja o nazwie wspaniala(). Pierwszy pakiet jest od producenta JANEK, a drugi od MARCIN. Jeśli chcemy używać funkcji wspaniala() od MARCIN, bo uważamy, że jest lepsza, udostępniamy definicję przestrzeni nazw MARCIN:

using namespace MARCIN;

i nie musimy za każdym wywołaniem funkcji wspaniala(), pisać MARCIN::wspaniala().
Wiąże się to także z uproszczeniem uaktualnienia starszych wersji programu, dodając tylko odpowiednią dyrektywę bez konieczności dopisywania do każdego elementu przedrostka.

Część III - funkcja main

Funkcja main() jest charakterystyczną funkcją w C++, która musi występować w każdym konsolowym programie. Wszystko co zaczyna się dziać w danej aplikacji, jest określana w ciele właśnie tej funkcji. Oczywiście wszystkie inne funkcje mogą być wywoływane z wnętrza tej funkcji.

Funkcja main() ma kilka postaci:

1. int main() lub int main(void) - postacie równoważne, oznaczające, że w ciele funkcji pojawia się informacja zwrotna (return 0 lub return EXIT_SUCCESS), która zwraca do systemu operacyjnego informacje o zakończeniu działania danej aplikacji
2. void main() - nie posiada informacji zwrotnej o zakończeniu działania programu, niezalecane, a w niektórych systemach niedopuszczalne.
3. main() - to samo co int main().
4. int main(int argc, char *argv[]) - funkcja z argumentami opisana poniżej.

Podczas uruchomienia programu za pomocą konsoli (w Windowsie: cmd.exe), oprócz podania nazwy programu, który chcemy uruchomić, możemy przekazać wstępne dane (parametry programu). Argument int argc, mówi ile tych danych jest, natomiast char *argv[] przechowuje te dane. Prześledźmy przykład programu program.exe, który wyświetli argumenty danego programu:

program.cpp:

  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.  
  9. for(int i=1;i<argc;i++)
  10. cout<<i<<" argument to "<<argv[i]<<endl;
  11.  
  12. return 0;
  13. }


Przykładowe wywołanie programu program.exe i wynik działania:


Wywołana została aplikacja z argumentami: arg1, arg2, x oraz 8991. Zauważmy, że argumenty oddzielamy spacją.
Jeśli program wywołujemy bez dodatkowych parametrów, listę argumentów funkcji main() można pominąć.

Część IV - życie programu

W tej części programu zaczyna się życie naszej aplikacji. Wszystko to co tu napiszemy, będzie rzutowało na sposób zachowania się naszego programu.

Zauważmy, że blok funkcji main(), zaczynamy nawiasem "{" i kończymy nawiasem "}".

Zasady stosowane w pisaniu kodu programu.

1. W języku c++ rozróżnia się małe i wielkie litery (polecenia c++ piszemy małymi literami).

2. Każdą instrukcję w kodzie źródłowym należy kończyć średnikiem.

3. W kodzie programu warto używać komentarzy dla poprawienia czytelności kodu szczególnie w obszernych programach. Komentarz jednowierszowy umieszczamy po znaku //, zaś wielowierszowy między znakami /*komentarz*/.




Wróć do spisu tematów