Inleiding C++ Coding Conventions

Vergelijkbare documenten
Gevorderd Programmeren

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

Datastructuren Werkcollege Intro

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Introductie in C++ Jan van Rijn. September 2013

Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Modelleren en Programmeren

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

int getaantalpassagiers{): void setaantalpassagiers(int aantalpassagiers);

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

Java. Basissyllabus. Egon Pas

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

Project 2: LOTTO simulatie Programmeren I

9 Meer over datatypen

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Vakgroep CW KAHO Sint-Lieven

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Vraag 1: HashTable [op 2 punten van de 20] Gegeven de header file HashTable.h van een hashtabel die pointers naar strings bijhoudt (in bijlage).

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Scala. Korte introductie. Sylvia Stuurman

EE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college

OEFENINGEN PYTHON REEKS 1

Zelftest Programmeren in Java

Javascript oefenblad 1

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

SYNTRA-WEST. Cursus OOP. Deel

Inleiding programmeren

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Labo 1 Programmeren II

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Programmeren in Java les 3

Dit document bevat informatie over make bij het eerstejaars college Programmeermethoden, Universiteit Leiden, najaar 2010, zie

Programmeren met Arduino-software

Design patterns Startbijeenkomst

Academie voor ICT en Media 2013/2014

Deeltentamen Grammatica s en ontleden 22 december 2005

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Modelleren & Programmeren. Jeroen Fokker

Datastructuren: stapels, rijen en binaire bomen

Succes! Theo DʼHondt 13 juni 2010

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Enterprise Connectivity. Marnix van Bo. TU Delft Elek Software Architect 20 jaar ervarin ontwikkeling

NAAM: Programmeren 1 Examen 21/01/2011

Overerving & Polymorfisme

eerste voorbeelden in Java

C++ programmeermethoden Bachelor Kunstmatige Intelligentie

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

C++ programmeermethoden Bachelor Kunstmatige Intelligentie

1 Inleiding in Functioneel Programmeren

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

Hoofdstuk 0. Van Python tot Java.

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur


Om de libraries te kunnen gebruiken, moet de programmeur (een deel van) zijn programma in C/C++ schrijven.

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

Een gelinkte lijst in C#

Syntax van opdracht. opdracht. expressie. variabele. = expressie ; klasse naam. methode naam. property naam += object

Practicum Ox intro. Practicum Ox intro. VU Numeriek Programmeren 2.5. Charles Bos. Vrije Universiteit Amsterdam. 3 april /18

Zelftest Inleiding Programmeren

Modelleren en Programmeren

C# 6 Door Alex en Chris van Beek

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

Programmeren in C# Klassen schrijven

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Turbo Pascal (deel 1)

Leren programmeren in C# Deel 2 - Gegevens

OEFENINGEN PYTHON REEKS 1

Tentamen Imperatief Programmeren

Gertjan Laan Aan de slag met C++ Vijfde editie

Kleine cursus PHP5. Auteur: Raymond Moesker

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Programmeermethoden. Controle-structuren. Walter Kosters. week 3: september kosterswa/pm/

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, uur

Programmeren in C# Samenvatting van C#

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Programmeren 1 20 januari 2012 Prof. T. Schrijvers

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59.

Modelleren en Programmeren

Online c++ leren programmeren:

Vaak wil je een code schrijven, waar je verschillende acties uitvoeren voor verschillende beslissingen. Je kan daarbij keuzestructuren gebruiken.

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

vandaag èn vrijdag deadline maandag 12 dec.

Inhoud leereenheid 7c. JavaScript: Objecten en functies. Introductie 59. Leerkern 60. Samenvatting 82. Opdrachten 83. Zelftoets 89.

Lessen Java: Reeks pag. 1

Software-Ontwikkeling I Academiejaar

VAN HET PROGRAMMEREN. Inleiding

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, uur

Programmeren in C# Interfaces. Hoofdstuk 23

TENTAMEN Programmeren 1

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!

Datastructuren en algoritmen

Transcriptie:

Inleiding C++ Coding Conventions Opleiding Bachelor of Science in Informatica, van de Faculteit Wetenschappen, Universiteit Antwerpen. Nota s bij de cursus voor academiejaar 2012-2013. Ruben Van den Bossche, Sam Verboven Onderzoeksgroep Computationeel Modelleren en Programmeren

Inhoudsopgave 1 Codeer conventies 2 1.1 Makefiles.................................. 2 1.2 Organisatie van bronbestanden...................... 2 1.3 Algemeen................................. 3 1.4 Indentatie................................. 3 1.5 Commentaar................................ 4 1.6 Naamgeving................................ 4 1.7 Preprocessing............................... 7

HOOFDSTUK 1 Codeer conventies 1.1 Makefiles In elk project komt minstens 1 makefile voor die minimaal volgende rules bevat: rule om het project te compileren, te linken en de doxygen documentatie te genereren (via make of make all) rule om de objectfiles te verwijderen (via make clean) 1.2 Organisatie van bronbestanden Elk C++ bronbestand bestaat uit de volgende onderdelen: 1. voor een headerfile, de multiple definition guard die meervoudige definitie door het meermaals includeren van het file verhindert 2. een algemeen commentaarblok in javadoc stijl dat volgende elementen bevat korte beschrijving @author @date @version 3. een include blok 4. de globale using statements

1.3. ALGEMEEN 3 5. het body-gedeelte Plaats een witregel tussen elk van deze onderdelen. 1.3 Algemeen Gebruik altijd slechts één statement per regel! Dus niet: a++;b++; maar wel a++; b++; Let er ook op dat je bij het aanroepen van procedures en methoden steeds de ronde haakjes plaatst, ook al geef je geen parameters mee! 1.4 Indentatie Alle onderdelen van sectie 1.2 worden tegen de kantlijn geplaatst. 1.4.1 Accolades Hoewel er nog meerdere stijlen bestaan voor wat betreft het plaatsen van accolades, zullen wij één van onderstaande conventies volgen. 1 int somefunction ( int someargument ) { 2... 3 for (i = 0; i < 100; i ++) { 4... 5 } 6... 7 } De openingsaccolade staat op dezelfde lijn als zijn voorganger en de sluitingsaccolade op een nieuwe regel. Een andere stijl gebruikt die conventie voor blokken in een functie- of klassedefinitie, maar zet de openingsaccolade voor functie-body s en klassedefinities op een nieuwe regel: 1 i n t somefunction ( i n t someargument ) 2 { 3... 4 for (i = 0; i < 100; i ++) { 5... 6 } 7... 8 }

1.5. COMMENTAAR 4 1.4.2 Regels afbreken Zorg ervoor dat de regels in uw code niet te lang worden (zodanig dat je niet moet gaan scrollen om een regel te lezen). Dikwijls is dit echter onvermijdelijk. Breek in die situaties de regel af en indenteer hem een tabpositie meer dan de eerste regel. Neem bij het afbreken volgende regels in acht: breek af na een komma breek af voor een operator verkies higher-level-afbreken boven lower-level (zoals bijvoorbeeld in lange expressies 1.5 Commentaar Op sommige plaatsen (zoals bij lange, ingewikkelde expressies) kan het nodig zijn een woordje commentaar toe te voegen. Aarzel niet dit dan ook te doen. Functies, klassen en methods worden ook voorzien van een commentaarblok in javadoc stijl met volgende gegevens: 1 / * korte beschrijving @param voor elke gebruikte parameter @return @exception indien er exceptions gethrowd worden Een voorbeeld: 2 * T h i s f u n c t i o n a d d s t w o i n t e g e r s. 3 * @ p a r a m a T h e f i r s t t e r m o f t h e s u m 4 * @ p a r a m b T h e s e c o n d t e r m o f t h e s u m 5 * @ r e t u r n T h e s u m o f a a n d b 6 * / 7 int sum ( int a, int b) 8 { 9 return a + b; 10 } 1.6 Naamgeving Goede naamgeving is zeer belangrijk en dus is het aangewezen zo weinig mogelijk afkortingen te gebruiken en namen zo logisch mogelijk te kiezen (dus zorg ervoor dat ze overeenstemmen met de realiteit!).

1.6. NAAMGEVING 5 1.6.1 Namespaces Namespaces beginnen steeds met een hoofdletter. In geval van meerdere woorden worden deze onderscheiden door een hoofdletter. 1 namespace MyNameSpace { 2... 3 } 1.6.2 Types, Acroniemen Begin de naam van een een type en een acroniem steeds met een hoofdletter. In geval van meerdere woorden worden deze onderscheiden door een hoofdletter. 1 typedef int MyTypeDef / / T y p e 2 SWLString mystring (" Secret World Live!") / / A c r o n i e m 1.6.3 Templateparameters Templateparameters moeten steeds beginnen met de letter A. In geval van meerdere woorden worden deze onderscheiden door een hoofdletter. 1 template <typename AType > / / A T y p e i s h e t t e m p l a t e a r g u m e n t 2 c l a s s FunctorTrait { 3... 4 }; 1.6.4 Enumeraties Enumeraties beginnen steeds met de letter E en in geval van meerdere woorden worden deze onderscheiden door een hoofdletter. enum EFreezeLevels {kfrozen=1, kthawn, knone} 1.6.5 Klassen Een basisklasse representeert fundamentele functionele objecten en begint steeds met een hoofdletter. Een virtuele basisklasse begint steeds met een V. Een pure virtuele klasse of interface begint steeds met de letter I. Een klasse die sommige, maar niet alle, functionaliteit van een virtuele basisklasse implementeerd, wordt een mixin class genoemd. Deze klassen beginnen met de letter M. Exceptionklassen beginnen steeds met een hoofdletter en eindigen op het woord Exception.

1.6. NAAMGEVING 6 Klassen die design patterns implementeren beginnen steeds met een hoofdletter en eindigen met de naam van het design pattern. Bijvoorbeeld 1 c l a s s BaseClass { / / B a s i s k l a s s e 2... 3 }; 4 5 c l a s s VBaseClass { / / V i r t u e l e b a s i s k l a s s e 6... 7 }; 8 9 c l a s s IUserInterface { / / I n t e r f a c e 10... 11 }; 12 13 c l a s s MPrintable { / / M i x i n c l a s s 14... 15 }; 16 17 c l a s s StandardException { / / E x c e p t i o n k l a s s e 18... 19 }; 20 21 c l a s s IconFactory { / / F a c t o r y p a t t e r n 22... 23 }; 1.6.6 Procedures, methodes Procedures en methodes beginnen steeds met een kleine letter. In geval van meerdere woorden worden deze onderscheiden door een hoofdletter. Getters en setters beginnen steeds met set..., get... of is... (bij Booleans). 1 int entier (double x) { / / f u n c t i e 2 return (( int ) x); 3 } 4 5 c l a s s Full { 6 bool stop ( long int size ); / / m e t h o d e 7 void setmessage ( std :: string & msg ); / / s e t t e r 8 std :: string & msg getmessage (); / / g e t t e r 9 bool ismessageset (); / / b o o l e a n 10 };

1.7. PREPROCESSING 7 1.6.7 Variabelen Variabelen en parameters beginnen steeds met een kleine letter. Bovendien geldt: globale en static variabelen beginnen met de letter g. constanten beginnen met de letter k. data members beginnen met de letter f. static data members beginnen met de letters fg. 1 int gcount ; / / g l o b a l e v a r i a b e l e 2 3 void foo () { 4 int counter ; / / l o k a l e v a r i a b e l e 5 s t a t i c int gcounter ; / / s t a t i c v a r i a b e l e 6 const int kmaxcount (100); / / c o n s t a n t e v a r i a b e l e 7... 8 } 9 10 c l a s s MyClass { 11 private : 12 std :: string fname ; / / d a t a m e m b e r 13 s t a t i c Date fgdefaultdate ; / / s t a t i c d a t a m e m b e r 14... 15 }; 1.7 Preprocessing 1.7.1 Multiple Inclusion Guard De multiple inclusion guard zorgt ervoor dat er geen meervoudige definities kunnen voorkomen door het meermaals includeren van eenzelfde headerfile. Gebruik steeds INC_BESTANDSNAAMINHOOFDLETTERS_EXTENSIE 1 # ifndef INC_ VIDEO_ H 2 # define INC_ VIDEO_ H 3... 4 # endif / / I N C _ V I D E O _ H 1.7.2 Conditionele compilatie Makro s laten toe om te switchen tussen broncode varianten. wanneer ze echt nodig zijn. Gebruik steeds het prefix DEF. Gebruik ze enkel

1.7. PREPROCESSING 8 1 # define DEF_ ARCH X86 2... 3 4 # ifdef DEF_ ARCH == 86 5... 6 e l s e 7... 8 # endif / / D E F _ A R C H