Cum directiva #include - informatică, programare
3.3. Cum directiva „#include“
„#include“ directivă specifică preprocesorul trata C spus
înainte de a procesa restul fișierului curent. Informațiile furnizate de
Preprocessor, conține deja datele, urmate de date,
care rezultă în procesarea fișierului inclus, și pentru care, la rândul său,
urmat de datele obținute în procesarea textului, ca urmare a directivelor
'#include'. De exemplu, având în vedere următorul dop fișier „header.h“:
și programul principal cu numele „program.c“, folosind acest fișier.
Datele obținute în prelucrarea „program.c“ programul va arata
macro. Orice fragment C program poate fi inclus în alte
fișier. Fișierul inclus poate conține chiar și la începutul expresiei,
care se termină în fișierul sursă sau la sfârșitul expresiei, la începutul căruia
Acesta este situat în fișierul sursă. Deși Comentariu și constante șir nu pot
TO CONNECT fișier și să continue în fișierul sursă. nu a fost finalizată
duce la apariția unei erori la sfârșitul fișierului.
Plug-in de fișier poate conține un început sau sfârșit sisntaksicheskoy
structură, cum ar fi funcția de definire.
Perioada în urma „#include“ directivă este întotdeauna goală și
se adaugă la preprocesorul C, chiar dacă fișierul plug-in nu conține
caracter de terminare a NEWLINE.
3.4. După ce a inclus fișiere
Se întâmplă adesea ca un fișier să includă include un alt fișier. acest
Aceasta poate duce la faptul că un fișier separat, va fi conectat în mod repetat,
ceea ce poate duce la erori în cazul în care fișierul definește tipurile
Structuri și definiții de tip. Prin urmare, ar trebui să evite mai multe
Acest lucru se realizează de obicei prin intrarea în starea întregului conținut
acest fișier, după cum se arată mai jos:
macro „FILE_FOO_SEEN“ indică faptul că un fișier este deja Comisiei, și o zi.
Conectat fișierele de utilizator macro nu ar trebui să înceapă cu
'_'. Sistemul include numele fișierelor nu trebuie să înceapă cu o
„__“ pentru a evita conflictele cu programe de utilizator. cum
Nu contează numele de fișier al macro trebuie să conțină numele fișierului, iar unele
text suplimentar pentru a se evita conflictele cu alte voznknoveniya
GNU C preprocessor este construit în așa fel încât procesarea plug-in
fișier verifică pentru anumite modele și cel mai rațional
Acesta le procesează. Preprocessor constată în mod specific atașarea dosarului complet în
condiție '#ifndef'. În cazul în care directiva „#include“ este conținută în fișierul includ,
indicând fișierul procesat, sau macro din directivă „#ifndef“ are
definit, fișierul procesat este complet ignorat.
Există, de asemenea, o directivă specială, preprocesor care
fișierul ar trebui să fie inclus mai mult de o dată. Această directivă se numește
'#pragma o dată'. Acesta a fost utilizat în plus față de directiva „#ifndef“ și
este acum depreciat și nu ar trebui să prmenyaetsya.
Într-un limbaj orientat-obiect C, există o modificare a Directivei
„#include“, numit „#import“, care este folosit pentru vkyucheniya fișier
nu mai mult de o dată. Atunci când se utilizează „#import“ în loc Directiva
„#include“ nu are nevoie de o viteză convențională pentru prevenirea
fișier de procesare multiple.
3.5. Include fișiere, și moștenirea
„Moștenirea“ este ceea ce se întâmplă atunci când un obiect sau
fișier formează o parte din conținutul său prin virtuale
copierea dintr-un alt obiect sau fișier. Când este conectat la fișierul
moștenire înseamnă că un fișier include un alt fișier, apoi înlocuiește
sau adăuga nimic.
Dacă ați moștenit un fișier includ și include fișierul sunt principalele
nume diferite, se numește moștenire directă. În acest caz,
constructii second-hand „#include«BASE»,“ în fișierul derivat.
Uneori este necesar să fi moștenit și fișierul antet principal
Avem același nume.
De exemplu, să presupunem că aplicația utilizează sistemul
include fișierul „sys / signal.h“, dar versiunea fișierului „/usr/include/sys/signal.h“
pe acest sistem realizează ceea ce este necesar în cerere.
Acesta va fi mai convenabil pentru a defini versiunea locală, eventual cu numele
„/usr/local/include/sys/signal.h“ pentru a înlocui sau adăuga la versiunile,
livrat cu sistemul.
Acest lucru se poate realiza prin utilizarea „-I.“ Opțiunea compila și
crearea fișierului „sys / signal.h“, care îndeplinește funcțiile de program necesare.
Dar pentru a face acest fișier include fișierul standard „sys / signal.h“ nu
atât de simplu. În cazul în care linia #include“
se va conecta noua versiune a fișierului, mai degrabă decât versiunea standard a sistemului.
Acest lucru va conduce la o eroare de recursivitate atunci când compilarea.
Dacă utilizați directiva #include ` '
fișierul dorit este găsit, dar această metodă nu este efektivnost ca
Acesta conține calea completă la sistemul de fișiere. Acest lucru poate afecta conținutul
sistem, deoarece aceasta înseamnă că orice modificări la amplasarea sistemului
fișiere necesită modificări suplimentare în altă parte.
O soluție mai eficientă la această problemă este utilizarea directivelor
„#include_next“, care este folosit pentru a conecta următorul fișier
același nume. Această directivă, de asemenea, să funcționeze ca un „#include“ directivă
cu excepția căutarea pentru fișierul dorit. Ea începe să caute lista de directoare
antet fișiere după directorul în care a fost găsit fișierul curent.
Să presupunem că a fost specificată opțiunea „-I / usr / local / include“, și lista
directoare pentru a căuta include '/ usr / include'. De asemenea, să presupunem că ambele
director conține un fișier numit „sys / signal.h“. directivă
„#include
'/ Usr / local / include'. Dacă fișierul conține un șir de caractere
„#include_next
directorul și fișierul va fi găsit în „/ usr / include“ director.