C - Koptekstbestanden
Een headerbestand is een bestand met de extensie .h die C-functiedeclaraties en macrodefinities bevat die tussen verschillende bronbestanden moeten worden gedeeld. Er zijn twee soorten header-bestanden:de bestanden die de programmeur schrijft en de bestanden die bij uw compiler worden geleverd.
U verzoekt om een header-bestand in uw programma te gebruiken door het op te nemen in de preprocessing-richtlijn C #include , zoals je hebt gezien dat stdio.h . is opgenomen header-bestand, dat bij uw compiler wordt geleverd.
Het opnemen van een headerbestand staat gelijk aan het kopiëren van de inhoud van het headerbestand, maar we doen het niet omdat het foutgevoelig is en het geen goed idee is om de inhoud van een headerbestand in de bronbestanden te kopiëren, vooral als we meerdere bronbestanden in een programma hebben.
Een eenvoudige praktijk in C- of C++-programma's is dat we alle constanten, macro's, systeembrede globale variabelen en functieprototypes in de headerbestanden bewaren en dat headerbestand opnemen waar het nodig is.
Syntaxis opnemen
Zowel de gebruiker als de systeemheaderbestanden worden opgenomen met behulp van de preprocessing-richtlijn #include . Het heeft de volgende twee vormen −
#include <file>
Dit formulier wordt gebruikt voor systeemkopbestanden. Het zoekt naar een bestand met de naam 'file' in een standaardlijst van systeemmappen. U kunt mappen aan deze lijst toevoegen met de optie -I tijdens het compileren van uw broncode.
#include "file"
Dit formulier wordt gebruikt voor headerbestanden van uw eigen programma. Het zoekt naar een bestand met de naam 'file' in de map die het huidige bestand bevat. U kunt mappen aan deze lijst toevoegen met de optie -I tijdens het compileren van uw broncode.
Bewerking opnemen
De #include richtlijn werkt door de C-preprocessor opdracht te geven het gespecificeerde bestand als invoer te scannen voordat verder wordt gegaan met de rest van het huidige bronbestand. De uitvoer van de preprocessor bevat de uitvoer die al is gegenereerd, gevolgd door de uitvoer die voortkomt uit het bijgevoegde bestand, gevolgd door de uitvoer die uit de tekst komt na de #include richtlijn. Als u bijvoorbeeld een headerbestand header.h als volgt heeft:−
char *test (void);
en een hoofdprogramma genaamd program.c dat het header-bestand gebruikt, zoals dit −
int x; #include "header.h" int main (void) { puts (test ()); }
de compiler zal dezelfde tokenstroom zien als wanneer program.c zou lezen.
int x; char *test (void); int main (void) { puts (test ()); }
Eenmalige kopteksten
Als een headerbestand twee keer wordt opgenomen, zal de compiler de inhoud twee keer verwerken en zal dit resulteren in een fout. De standaardmanier om dit te voorkomen is om de volledige echte inhoud van het bestand in een voorwaardelijke, zoals deze in te sluiten −
#ifndef HEADER_FILE #define HEADER_FILE the entire header file file #endif
Deze constructie is algemeen bekend als een wrapper #ifndef . Wanneer de koptekst opnieuw wordt opgenomen, is de voorwaardelijke onwaar, omdat HEADER_FILE is gedefinieerd. De preprocessor zal de volledige inhoud van het bestand overslaan en de compiler zal het niet twee keer zien.
Berekend inclusief
Soms is het nodig om een van de verschillende header-bestanden te selecteren die in uw programma moeten worden opgenomen. Ze kunnen bijvoorbeeld configuratieparameters specificeren die op verschillende soorten besturingssystemen moeten worden gebruikt. Je zou dit als volgt kunnen doen met een reeks voorwaarden:−
#if SYSTEM_1 # include "system_1.h" #elif SYSTEM_2 # include "system_2.h" #elif SYSTEM_3 ... #endif
Maar naarmate het groeit, wordt het vervelend, in plaats daarvan biedt de preprocessor de mogelijkheid om een macro te gebruiken voor de headernaam. Dit wordt een berekende include . genoemd . In plaats van een headernaam te schrijven als het directe argument van #include , je zet daar gewoon een macronaam −
#define SYSTEM_H "system_1.h" ... #include SYSTEM_H
SYSTEM_H wordt uitgebreid en de preprocessor zoekt naar system_1.h alsof de #include was oorspronkelijk zo geschreven. SYSTEM_H kan worden gedefinieerd door je Makefile met een -D optie.
C Taal