Styl programowania przyjety na Programowaniu Zaawansowanym semestr letni 2013 (grupa nr 3, kazdy wtorek, 12:15 - 14:00) ************************************************************* (na podstawie stylu programowania przyjętego na Wydziale MIM UW, ale to generalnie dobry styl programowania) 0 Spis tresci: -------------- 1 Ogolne reguly 2 Nazewnictwo 3 Pliki naglowkowe 4 Zasady dobrego i czytelnego umieszczania poszczegolnych konstrukcji 1 Ogolne reguly --------------- 1.1 Ocenie podlegaja jedynie kompletne programy umieszczone w oddzielnym katalogu. 1.2 Kazdy program musi byc zaopatrzony w Makefile. 1.2.1 Wywolanie make bez parametrow musi przeprowadzic kompilacje wszystkich komponentow. 1.2.2 Wywolanie 'make clean' musi usuwac wszystkie wyniki kompilacji. 1.3 Programy sa kompilowane z opcja: 1.3.1 -Wall i nie moga generowac zadnych ostrzezen, 1.3.1 -std=c++11 lub -std=c++0x używamy nowych konstrukcji językowych (ze standardu 2011), 1.4 Kazdy program musi byc zaopatrzony w README z opisem co robi program. 1.5 Programy musza dzialac co najmniej w pracowni studenckiej. Tlumaczenie, ze program dziala w domu, nie bedzie brane pod uwage. 1.6 Poleceniem #include mozna dolaczac wlasne biblioteki, ale jedynie poprzez pliki naglowkowe (*.h). 1.7 Deklaracje wspolne dla kilku plikow zrodlowych umieszcza sie w plikach naglowkowych (wystepowanie duplikatow definicji, deklaracji i makrodefinicji w plikach zrodlowych swiadczy o niechlujstwie i zle postrzegane). 1.8 Uzywanie zmiennych globalnych jest zakazane. Wszystkie dane nalezy przekazywac przez parametry podprogramow. 1.8.1 Wyjatkiem sa sytuacje, w ktorych bez zmiennych globalnych absolutnie nie da sie napisac programu. 1.9 Uzywanie instrukcji goto jest zakazane. 1.10 Wartosci przekazywane przez wywolania systemowe musza byc badane. 1.11 Identyfikatory i komentarze musza byc zapisywane spojnie, w takim samym jezyku (polskim lub angielskim). 2 Nazewnictwo ------------- 2.1 Deklaracja funkcji main(...) umieszczona jest w pliku main.cpp lub main.C. 2.2 Identyfikatory powinny byc znaczace. 2.3 Nazwy makrodefinicji piszemy wielkimi literami. 2.4 Dodatkowo: patrz punkt 1.11 3 Pliki naglowkowe ------------------ 3.1 Plik naglowkowy moze zawierac jedynie: 3.1.1 Makrodefinicje, 3.1.2 Deklaracje podprogramow, 3.1.3 Deklaracje struktur, 3.1.4 Deklaracje typow (typedef), 3.1.5 Deklaracje objektow. 3.2 Plik naglowkowy nazwa.h ma format: #ifndef _NAZWA_H_ #define _NAZWA_H_ /* deklaracje i makrodefinicje */ #endif 4 Zasady dobrego i czytelnego umieszczania poszczegolnych konstrukcji --------------------------------------------------------------------- 4.1 Separatory 4.1.1 Przed przecinkiem nie wystepuje spacja. Po przecinku jest jedna spacja. np. mnoz(345, 657) 4.1.2 Operatory -> . nie moga miec spacji po zadnej stronie. np. osoba.nazwisko biezacy->nastepny 4.1.3 Po prawej stronie jednoargumentowego minusa nie moze wystapic spacja. np. y = -x; y = 2 * (-x + 3); 4.1.4 Po nawiasie otwierajacym i przed nawiasem zamykajacym nie moze wystapic spacja. Dotyczy wszystkich rodzajow nawiasow. 4.1.5 Pozostale operatory sa otoczone pojedyncza spacja, np. znaleziony = pozycja + 5; 4.2 W deklaracjach zmiennych wskaznikowych gwiazdke umieszcza sie przy nazwie zmiennej, np. int *miejsce; 4.3 Deklaracja struktury (lub unii) ma postac: struct nazwa { typ1 pole1; typ2 pole2; ... }; 4.4 Deklaracja funkcji ma postac: typ_wyniku nazwa(typ_arg1 p_arg1, ..., typ_argn argn); 4.5 Definicja funkcji ma postac: typ_wyniku nazwa(typ_arg1 p_arg1, ..., typ_argn argn) { typ_zmiennej_lokalnej1 v_zmienna1; typ_zmiennej_lokalnej2 v_zmienna2; ... instrukcje; } 4.6 Instrukcja switch 4.6.1 Instrukcja switch ma nastepujaca postac: switch (wyrazenie) { case stala1: instrukcje; case stala2: instrukcje; ... default: instrukcje; } 4.6.2 Fraza default musi wystepowac nawet jesli wydaje sie to bez sensu (kontrola bledow). 4.6.3 Kazde fraza case ... powinna konczyc sie instrukcja break, exit, return, syserr lub fatal. 4.6.2.1 Brak break wymaga kom