preprocessor directives c
C ++ 'da Önişlemci Direktiflerine Ayrıntılı Bir Bakış.
Ön işlemci, C ++ 'nın benzersiz bir özelliğidir. C ++ 'da, tipik bir program için derleme, bağlama ve çalıştırma gibi adımlarımız var. Gerçekte, bir C ++ programında, programı derleme için geçmeden önce işlenmesi gereken birçok başka özelliğe sahibiz.
Bunun için ön işleme adı verilen özel bir adım gerçekleştirilir. Derleme işleminden önce ön işleme gerçekleştirilir ve özel özellikler ön işlemden geçirilir. Sonuç olarak, genişletilmiş bir C ++ programı elde edilir ve ardından derleyiciye aktarılır.
=> Sıfırdan C ++ Öğrenmek İçin Burayı Ziyaret Edin.
Ne öğreneceksin:
- Genel Bakış
- Dosya Dahil Etme Direktifleri
- Makro Tanımlama Direktifleri
- Koşullu Derleme Direktifleri
- # & ## Operatörleri
- Diğer Direktifler
- Önceden Tanımlanmış Makrolar
- Sonuç
- Önerilen Kaynaklar
Genel Bakış
Ön işleme için özel özellikler, 'Önişlemci yönergesi' adı verilen bir varlık kullanılarak tanımlanır. Bu önişlemci yönergeleri derleyiciye önişlemci yönergeleriyle işaretlenmiş C ++ programındaki belirli bilgilerin derlemeden önce ön işlemden geçirilmesi gerektiğini söyler.
C ++ 'da tüm önişlemci yönergelerinin bir '#' sembolü ile başladığına dikkat edin. Önişlemci (derleyicinin parçası) # sembolüyle karşılaştığı anda, # sembolünü izleyen bilgi, programı derleyiciye geçirmeden önce işlenir.
Diğer C ++ deyimlerinin aksine, önişlemci yönergeleri noktalı virgülle bitmez.
Bu eğitimde, C ++ tarafından desteklenen çeşitli önişlemci yönergelerini inceleyeceğiz.
Dosya Dahil Etme Direktifleri
#Dahil etmek
Dosya dahil etme yönergesi #include, kaynak programımıza başka dosyaları da dahil etmemize izin verir. Bu işlevleri kullanarak programımıza çeşitli önceden tanımlanmış işlevlerin tanımlarını içeren herhangi bir başlık dosyasını dahil edebiliriz. Aşağıdaki sözdizimini kullanarak başlık dosyalarını programımıza dahil edebiliriz.
#include
Misal: #Dahil etmek
Bunu C ++ programlarımızda zaten görmüştük. Iostream başlığı, cout, cin, vb. Gibi giriş / çıkış veri akışı için gerekli işlevleri içerir.
Programlarımız büyüdükçe veya işlevsellik karmaşık hale geldikçe, programımızı çeşitli dosyalara bölmek veya diğer dosyalardan işlevselliği içe aktarmak isteyebiliriz. Bu durumda, kullanıcı tanımlı dosyalardan yararlanıyoruz. Programımıza kullanıcı tanımlı dosyaları dahil etmek için aşağıdaki #include yönergesinin sözdizimini kullanabiliriz.
#include “filename”
Misal: #include 'vector_int.h'
Bu, işlevselliğini kullanmak için programımıza dahil etmeyi planladığımız kullanıcı tanımlı bir başlık dosyasıdır.
Aşağıdaki kod Örneği #include direktifinin kullanımını göstermektedir.
.net web hizmetleri mülakat soruları
#include using namespace std; int main() { cout<<'This is an example demonstrating inclusion directive #include'; }
Çıktı:
Bu, dahil etme yönergesini #include gösteren bir örnektir.
Gösterildiği gibi, başlığın işlevselliğini programımıza dahil etmek için #include direktifini kullandık.
Makro Tanımlama Direktifleri
#tanımlamak
#Define yönergesi, C ++ programında sembolik sabitleri veya makroları tanımlamak için kullanılır.
#Define yönergesinin genel biçimi şöyledir:
#define macro_name replacement code
Bir önişlemci programdaki makroyla karşılaştığında, önişlemci bu makroyu, kod derleyiciye iletilmeden önce #define yönergesi kullanılarak tanımlanan kodla değiştirir.
Aşağıdaki kod Örneği, #define yönergesi ve programdaki kullanımı kullanılarak tanımlanan sembolik bir sabit RADIUS'u gösterir.
#include #define RADIUS 5 using namespace std; int main() { cout<<'Area of a circle : '<<3.142 * RADIUS * RADIUS; }
Çıktı:
Bir dairenin alanı: 78,55
Programda gösterildiği gibi, kodumuzda sembolik sabit RADIUS kullanabiliriz ve #define yönergesi kullanılarak kendisi için tanımlanan değerle değiştirilecektir.
yazılım testinde test senaryosu biçimi
Uygun bir fonksiyon kodu tanımlamak için #define direktifini kullanabiliriz. Bu işlevler genellikle küçük işlevlerdir.
Aşağıda bir örnek gösterilmiştir.
#include #define REC_AREA(length, breadth) (length * breadth) using namespace std; int main() { int length = 20, breadth = 5, area; area = REC_AREA(length, breadth); cout << 'Area of a rectangle is: ' << area; return 0; }
Çıktı:
Dikdörtgenin alanı: 100
Burada #define direktifini kullanarak, uzunluk ve genişlik gibi iki argüman alan ve bir dikdörtgenin alanını hesaplayan REC_AREA işlevini tanımladık. Ana işlevde, bu makroyu kullanıyoruz ve bir dikdörtgenin alanını elde etmek için ona iki argüman sağlıyoruz.
#undef
#Define yönergesiyle tanımlanan bir programdaki makrolar, #undef yönergesi kullanılarak tanımsız hale gelene kadar sürer. Program #undef ile karşılaştığında, makronun sonraki kullanımı (#undef tarafından tanımlanmamış) bir derleme hatası verir.
Yukarıdaki programda, tamsayı bildirimlerinden sonra sadece bir #undef REC_AREA ifadesi verirsek, program bir derleme hatası verecektir.
Koşullu Derleme Direktifleri
Yukarıda açıklanan yönergelerin yanı sıra, C ++ ayrıca koşullu kod derlemesi için kullanılabilecek aşağıdaki yönergeleri de sağlar. Bu yönergeler, C ++ if-else ifadesinin benzer satırlarında kullanılabilir.
Örneğin, Bu koşullu yönergeleri kullanarak bir program için DEBUG'ı AÇIK veya KAPALI olarak ayarlayabiliriz.
C ++ ile sağlanan bazı koşullu derleme yönergeleri şunları içerir:
- #Eğer
- #elif
- #endif
- #ifdef
- #ifndef
- #Başka
Aşağıdaki program bir C ++ programında koşullu derleme yönergelerinin kullanımını göstermektedir.
#include using namespace std; #define DEBUG #define MAX(a,b) (((a)>(b)) ? a : b) int main () { int i, j; i = 100; j = 50; #ifdef DEBUG cout <<'Trace: Start of main function' << endl; #endif cout <<'The maximum is ' << MAX(i, j) << endl; #undef MAX //cout <<'The maximum is ' << MAX(10,20) << endl; #ifdef DEBUG cout <<'Trace: End of main function' << endl; #endif return 0; }
Çıktı:
İz: Ana işlevin başlangıcı
Maksimum 100'dür
İz: Ana işlevin sonu
Yukarıdaki programda, program için bir DEBUG tanımlamak için #ifdef - #endif direktifini kullanıyoruz. Ardından, #undef yönergesini kullanarak MAX makro işlevini tanımladık. Koşullu derleme yönergesi #ifdef - #endif yapılandırır, DEBUG'ın ayarlanıp ayarlanmadığını kontrol eder ve eğer ayarlanmışsa, programda birkaç mesaj yazdırır.
# & ## Operatörleri
# Ve ## operatörleri, sırasıyla bir metin belirtecini görüntülenecek bir dizeye dönüştürmek ve iki simgeyi birleştirmek için kullanılan iki özel operatördür.
Aşağıda, bu operatörlerin ikisini de gösteren bir Örnek verilmiştir.
#include using namespace std; #define MKSTR( x ) #x #define concat(a, b) a ## b int main () { cout <<'MKSTR(Hello World) = '<< MKSTR(Hello World) << endl; int xy = 100; cout <<'concat(x,y) = '< Çıktı:
MKSTR (Merhaba Dünya) = Merhaba Dünya
concat (x, y) = 100
Yukarıdaki programda, MKSTR'yi bir x argümanı ile tanımlıyoruz. #X gövdesine sahiptir. Bu MKSTR'yi 'Merhaba Dünya' argümanını kullanarak yazdırdığımızda, #x nedeniyle argümanın bir dizgeye dönüştürüldüğünü ve çıktıda görüntülendiğini görüyoruz.
Daha sonra, a ve b iki bağımsız değişkenli bir concat işlevi tanımladık. Gövde kısmında bir ## b belirtiyoruz. İfade a ## b eşittir ab. Böylece, ana işlevde concat (x, y) dediğimizde, aslında tanımladığımız tamsayı değişkenine eşit olan xy'yi değerlendirir.
Diğer Direktifler
#hata
#Error direktifinin genel sözdizimi şöyledir:
#error error_message
Derleyici #error yönergesiyle karşılaştığında, error_message'ı görüntüler ve derleme durur. Error_message bağımsız değişkeni tırnak işaretli veya tırnaksız bir veya daha fazla sözcük içerebilir.
#hat
Bu, derleyiciye derleyicinin dahili olarak depolanan satır numarasını ve dosya adını verilen satır numarası ve dosya adına değiştirmesini söyler.
#hat rakam dizisi ('dosya adı')
Digit_sequence bir tamsayı sabiti olabilir.
Misal:#line 200 test.c
Yukarıdaki örnekte, dahili olarak depolanan satır numarası 200 olarak ayarlanmıştır ve dosya adı test.c olarak değiştirilmiştir.
#pragma
Derleyiciye uygulama tanımlı talimatlar sağlar. Bu talimatlar derleyiciye ve platforma özeldir. Komut uyuşmazsa, sözdizimi hatası oluşturmadan yönerge yok sayılır.
Önceden Tanımlanmış Makrolar
C ++ ayrıca programcılar tarafından kullanılabilecek önceden tanımlanmış çok sayıda makro tanımlar.
Bu makrolardan bazıları aşağıda tablo halinde verilmiştir.
Önceden Tanımlanmış Makro Açıklama __DOSYA__ Derlenmekte olan programın mevcut dosya adı __DATE__ Kaynak kodun ay / gün / yıl biçiminde nesne koduna çevrildiği tarih __ZAMAN__ Formdaki zaman saat: dakika: programın derlendiği saniye __HAT__ Derlenmekte olan programın mevcut satır numarası __cplusplus Her derleyici sürümü için tanımlanan tamsayı sabiti
Aşağıdaki program bu makroları bir programda göstermektedir.
#include using namespace std; int main () { cout<<'__LINE__ :' << __LINE__ << endl; cout<<'__FILE__ :' << __FILE__ << endl; cout<<'__DATE__ :' << __DATE__ << endl; cout<<'__TIME__ :' << __TIME__ << endl; cout<<'__cplusplus:'<<__cplusplus< Çıktı:
__LINE__: 5
__FILE__: prog.cpp
__DATE__: 15 Nisan 2019
__TIME__: 12: 09: 15
__cplusplus: 201402
Yukarıdaki program çıktısı, yukarıdaki önceden tanımlanmış makroların açıklaması ile uyumludur ve kendi kendini açıklayıcıdır.
Sonuç
Bu eğitimde, örnekleriyle birlikte C ++ tarafından sağlanan çeşitli önişlemci yönergelerini gördük. Önişlemci yönergeleri, daha verimli programlar ve bir dereceye kadar daha okunabilir programlar yazmamıza yardımcı olur.
c ++ 'da basit birleştirme sıralama programı
Koşullu derleme yönergeleri ayrıca program çıktımızı çeşitli şekillerde dallara ayırmamıza izin verir.
=> Tüm C ++ Eğitim Serisini Burada Arayın.
Önerilen Kaynaklar
- Yazılım Testi Yardım Ortaklık Programı!
- Yaz ve Kazan - Deneyimli QA Test Uzmanları için Program
- Unix Borular Eğitimi: Unix Programlamada Borular
- C ++ 'da Kitaplık İşlevleri
- ÜCRETSİZ C ++ Programlamayı Öğrenmek İçin 70+ EN İYİ C ++ Öğreticisi
- C ++ 'da Komut Satırı Bağımsız Değişkenleri
- STL'de Yineleyiciler
- C ++ 'da Başlatıcı Listeleri