C kezdőknek

C ++ kezdők

1.3. preprocessor irányelvek

Header fájlok szerepelnek a programban szöveget elpárologtató irányelv #include. Előfeldolgozó direktívák kezdődik egy „éles” jel (#), ami az első karaktert. Egy program, amely feldolgozza ezeket az irányelveket, az úgynevezett elpárologtató (modern fordítóprogramok, elpárologtató általában része a fordító).
Az #include direktíva tartalmazza a tartalmát a program fájlt. A fájlnév megadható két módja van:

Ha a fájlnév hegyes zárójelek (<>) A becslések szerint szükségünk van egy szabványos header fájlt, a fordító úgy néz ki, hogy a fájl előre meghatározott helyeken. (A módszer meghatározására ezeken a helyeken nagyon eltérőek a különböző platformok és megvalósítások.) Dupla idézetek mutatják, hogy a header file - a felhasználó, és a keresési kezdődik a könyvtárban, ahol a forráskódot.
Header fájlt is tartalmazhat #include irányelveket. Ezért néha nehéz megérteni, hogy pontosan mi a fejléc fájlokat tartalmazza a forráskódot, header fájlok, és néhány lehet benne többször. Kerüljük ezt lehetővé teszi, a feltételes előfeldolgozó direktívák. Vegyük ezt a példát:

Feltételes #ifndef irányelv ellenőrzi, hogy BOOKSTORE_H értékét korábban megadott. (BOOKSTORE_H - elpárologtató állandó és az ilyen állandó döntött, hogy írjon nagybetűvel.) Az előfeldolgozó feldolgozza a következő sorokat, amíg #endif irányelvet. Egyébként ez kihagy egy sort a #ifndef az # endif.
irányelv

preprocessor meghatározza állandó BOOKSTORE_H. Azáltal, hogy ez az irányelv után azonnal #ifndef irányelv biztosítani tudjuk, hogy a lényegi része a fejléc bookstore.h fájl tartalmazza a forráskód csak egyszer, nem számít, hogy hányszor magában a szövegben, hogy a fájl.
Egy másik gyakori alkalmazás a feltételes preprocessor irányelvek a szövegben szereplő adatok hibakeresési programot. Például:

Ha DEBUG konstans nincs meghatározva, a kapott kódot a program így néz ki:

Ellenkező esetben kap:

Állandó preprocessor lehet meghatározni a parancssorban, amikor hívás keresztül fordító beállításai -D (a különböző változatokban, ez a lehetőség is különbözőképpen hívják). UNIX alapú rendszerek hívja a fordító a meghatározása preprocessor állandók DEBUG az alábbiak szerint:

Vannak állandók, amelyek automatikusan végzi a fordító. Például kiderül, ha összeállítjuk C ++ vagy C program. C ++ programok automatikusan határozza __cplusplus állandó (két aláhúzás). A szabványos C meghatározzuk __STDC__. Természetesen, a két állandók nem lehet egyidejűleg meghatározni. például:

Egyéb hasznos előre definiált konstansok (ebben az esetben jobb, ha mondjuk a változók) és az elpárologtató vannak __LINE__ __FILE__. __LINE__ változó számát tartalmazza az aktuális sort állítja össze és __FILE__ - a név a fájl összeállítani. Itt egy példa azok használatáról:

Két állandók __DATE__ __TIME__ és tartalmazza a dátumot és az időt az összeállítás.
A szabványos C könyvtár egy hasznos érvényesíteni () makró, amely ellenőrzi a feltételt, és ha ez nem teljesül, diagnosztikai üzenet, és megszakítja a program. Gyakran használjuk ezt a hasznos makróprogramokat az alábbi példák. Ahhoz, hogy használni kell a programban foglalt irányelv

assert.h - ez header fájl szabvány C könyvtár C ++ kód utalhat a header fájlt a neve, elfogadta a C, és a név elfogadott C ++. A szabványos C ++ könyvtár, ez a fájl neve cassert. A név a header fájl a C ++ library eltér a fájl nevét a C-kiterjesztés hiánya .h és az első esetben a C betű (említettük, hogy a header fájlokat a C ++ kiterjesztés nem használják, mert függ a végrehajtás).
A hatás a preprocessor irányelv #include típusától függ a header file. oktatás

Ez magában foglalja a program szövegébe tartalmát cassert fájlt. De mivel az összes használt nevek a szabványos C ++ könyvtár meghatározása a std tér, a neve a assert () lesz látható, amíg nem kifejezetten teszik láthatóvá válik a következő használatával irányelvek:

Ha ehhez a programban fejlécfájl C könyvtár

hogy szükség van egy using-irányelv már nem: a neve a assert () lesz látható, és így. (Névterek könyvtárak fejlesztők használják, hogy megakadályozzák az eltömődés a globális névteret. 8.5 szakasz tárgyalja ezt részletesebben.)

Kapcsolódó cikkek