Vakgroep Informatietechnologie – SoftwareOntwikkeling 1 SoftwareOntwikkeling 1 Conditionele compilatie in C met de macropreprocessor
Macro’s – Conditionele compilatie Vakgroep Informatietechnologie – SoftwareOntwikkeling 1 p. 2 Conditionele compilatie C preprocessor Verwerkt lijnen met # vooraan Vóór compilatie verwerkt Gebruik: Inclusie libraries #include Definitie constanten #define PI 3.14 Debug informatie #define DEBUG #ifdef DEBUG printf(“Debuginfo”); #endif ‘echte’ macro’s #define X(i) x##i #define PRINT(i) printf("%d ",X(i)) Conditionele compilatie!
Macro’s – Conditionele compilatie Vakgroep Informatietechnologie – SoftwareOntwikkeling 1 p. 3 Conditionele compilatie Soms nodig in meerdere.c-files zelfde datatype (uit.h file) nodig via #include “naam.h” Meerdere keren zelfde type includeren => error: Meerdere keren zelfde functie declareren => toegelaten Hoe afschermen tegen dubbele inclusie? #ifndef NAAM_TYPE #define NAAM_TYPE … /* definitie data(types) */ #endif Preprocessor zal.h file enkel includeren als de constante NAAM_TYPE nog niet gedefinieerd is => slechts 1 inclusie van het datatype
Macro’s – Conditionele compilatie Vakgroep Informatietechnologie – SoftwareOntwikkeling 1 p. 4 Conditionele compilatie: voorbeeld grootvader.h struct foo { int member; }; vader.h #include "grootvader.h“ kind.c #include "grootvader.h" #include “vader.h“ Compileren geeft: error C2011: ‘foo’: ‘struct type’ see declaration of ‘foo’
Macro’s – Conditionele compilatie Vakgroep Informatietechnologie – SoftwareOntwikkeling 1 p. 5 Conditionele compilatie: voorbeeld (2) Oplossing: grootvader.h #ifndef H_GROOTVADER #define H_GROOTVADER struct foo { int member; }; #endif Gebruik voor elke #ifndef-define- endif constructie een andere naam om conflicten te vermijden Gemakkelijkst: naam van de header file Met H_ ervoor