Een #define gebruikt in principe geen geheugen (bij int dan). Het wordt door de preprocessor in de broncode geplakt en wordt door de compiler verwerkt in de instructies.
De static const int CONSTANTE1 = 5 van H!GHGuY vind ik wel een geinige constructie, maar alleen zou ik het bestand hernoemen naar .c. Het is namelijk geen info, maar echte code/data.
Is een apart c-bestand met de constantes als const (ints, arrays en dergelijke) en een h-bestand met "extern" geen optie? Je kan dan voor elk platform een eigen c-bestand maken en het probleem met linken oplossen.
edit:
Nog even reageren op mijn bovenbuurman:
Niet waar. Bij defines is er ook een typecontrole. De preprocessor plakt als het ware dingen in de broncode en daarna moet alles kloppen wat types betreft. Dit zal bv niet werken:
C:
1
2
| #define MYCONST "test"
double x = MYCONST; |
Het ook prima mogelijk is om een C file te includen, mits je deze dus niet apart compileert. Zo kun je bijvoorbeeld config_modus_A.c includen bovenin je C file.
Waar (behalve als we gaan mierenneuken: apart compileren maakt juist niet uit

. Je moet het object dan alleen niet mee linken. Als je compilen en linken in 1x keer doet met bv "gcc x.c y.c" moet je het ook niet toevoegen als argument. Apart compilen met "gcc -c config_modus_A.c" maakt een mooi object en kan dus wel

)
Het voordeel van die constructie is dat je per #if een andere C file kan gebruiken, die in tegenstelling tot een header file ook normale variabelen voor je module mag bevatten die een andere beginwaarde hebben.
Niet waar. Het maakt voor de preprocessor bij #include niet uit of je het bestand .c of .h of .xxx hebt genoemd. Een conventie is dat het c-bestand code (functies) of data (variabelen maar ook "const int x = 5;") bevat en de header alleen info voor de preprocessor (defines (ook macros)) en de compiler (functie-declaraties(dus zonder body), structs, enums, externs). Van een los c-bestand kan je dan een object maken dat je kan linken met andere objecten en libraries. Met een losse header kan je niet veel. Het bevat immers geen code en geen data.
[
Voor 61% gewijzigd door
Daos op 01-02-2014 19:26
]