C++'ta Koşullu Derleme
Koşullu derleme (şartlı derleme, conditional compilation), derleyicinin derleme sırasında sağlanan parametrelerle üretilen çalıştırılabilir programda farklılıklar oluşturmasını sağlayan derleme gerçekleme yöntemidir.*
Bu teknik, yazılımı farklı platformlarda ya da gerekli kütüphanelerin veya donanımların farklı sürümleriyle çalıştırmak için farklılıklar gerektiğinde yaygın olarak kullanılır.
Pek çok programlama dili koşullu derlemeyi destekler. Sıklıkla derleyici yönergeleri belirli değişkenleri tanımlar veya değişkenlerin tanımlamalarını kaldırır, diğer yönergeler de bu değişkenleri test eder ve derlemeyi buna göre değiştirir.
Örneğin, SDL ve SFML gibi kütüphaneler asıl dili (C veya C++) kullanmadan pencere oluşturumunu, klavye ve fare yönetimini Linux, macOS veya Windows için özel olarak tanımlayabilmektedir. Bunun basitleştirilmiş bir örneği şöyle gösterilebilir:
$ g++ kosullu-derleme1.cpp
$ ./a.out
Linux'tan merhaba
Derleyicilerin çoğu işletim sistemleri için kullanılan değişkenleri tanımlar. Bu değişkenlerle, kodun bazı bölümlerinin yalnızca belirtilen işletim sistemleri hedeflenirken derlenmesi sağlanır. Bu değişkenlerin bir listesi Pre-defined Compiler Macros - Operating Systems'tan görülebilir.
Koşullu derlemenin kullanım alanlarından biri de hata ayıklama sürümüyle kullanıcıya sunulacak nihai sürüm üzerinde kod değişikliğine gerek kalmaksızın farklılıklar oluşturmaktır:
#if VERBOSE >= 2
std::cout << "... uyarı mesajı\n";
#endif
C, C++ ve bu aileden gelen diğer dillerde koşullu derleme için kullanılan yönergeler arasında #if, #ifdef, #ifndef, #else, #elif ve #endif bulunur.
Koşullu derleme hakkında tüm bunları okuduktan sonra Necati Ergin'in konuyla ilgili şu sorusuyla öğrendiklerinizi sınayabilirsiniz.
* Koşullu derleme aslında önişlemci tarafından sağlanır, anlatımı basit tutmak için derleme içinde olduğu söylenmiştir.
Bu teknik, yazılımı farklı platformlarda ya da gerekli kütüphanelerin veya donanımların farklı sürümleriyle çalıştırmak için farklılıklar gerektiğinde yaygın olarak kullanılır.
Pek çok programlama dili koşullu derlemeyi destekler. Sıklıkla derleyici yönergeleri belirli değişkenleri tanımlar veya değişkenlerin tanımlamalarını kaldırır, diğer yönergeler de bu değişkenleri test eder ve derlemeyi buna göre değiştirir.
Örneğin, SDL ve SFML gibi kütüphaneler asıl dili (C veya C++) kullanmadan pencere oluşturumunu, klavye ve fare yönetimini Linux, macOS veya Windows için özel olarak tanımlayabilmektedir. Bunun basitleştirilmiş bir örneği şöyle gösterilebilir:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
int main() | |
{ | |
#ifdef __linux__ | |
std::cout << "Linux'tan merhaba\n"; | |
#endif | |
#ifdef _WIN32 | |
std::cout << "Windows'tan merhaba\n"; | |
#endif | |
#ifdef __APPLE__ | |
std::cout << "macOS'tan merhaba\n"; | |
#endif | |
#ifdef __HAIKU__ | |
std::cout << "Haiku'dan merhaba\n"; | |
#endif | |
return 0; | |
} |
$ g++ kosullu-derleme1.cpp
$ ./a.out
Linux'tan merhaba
Derleyicilerin çoğu işletim sistemleri için kullanılan değişkenleri tanımlar. Bu değişkenlerle, kodun bazı bölümlerinin yalnızca belirtilen işletim sistemleri hedeflenirken derlenmesi sağlanır. Bu değişkenlerin bir listesi Pre-defined Compiler Macros - Operating Systems'tan görülebilir.
Koşullu derlemenin kullanım alanlarından biri de hata ayıklama sürümüyle kullanıcıya sunulacak nihai sürüm üzerinde kod değişikliğine gerek kalmaksızın farklılıklar oluşturmaktır:
#if VERBOSE >= 2
std::cout << "... uyarı mesajı\n";
#endif
C, C++ ve bu aileden gelen diğer dillerde koşullu derleme için kullanılan yönergeler arasında #if, #ifdef, #ifndef, #else, #elif ve #endif bulunur.
Koşullu derleme hakkında tüm bunları okuduktan sonra Necati Ergin'in konuyla ilgili şu sorusuyla öğrendiklerinizi sınayabilirsiniz.
* Koşullu derleme aslında önişlemci tarafından sağlanır, anlatımı basit tutmak için derleme içinde olduğu söylenmiştir.
Yorumlar
Yorum Gönder
sen de yaz yaz yaz buraya yaz bütün sözlerini