Makrolar (C/C++)
Önişlemci, ilk boşluk olmayan karakter olarak bir # olan satırlar olan ön işlemci yönergeleri dışındaki tüm satırlardaki makroları genişletir. Bazı yönergelerin koşullu derlemenin parçası olarak atlanmayan bölümlerindeki makroları genişletir. Koşullu derleme yönergeleri , kaynak dosyanın bölümlerinin derlenmesini engellemenize olanak sağlar. Derleyiciye hangi metin bloklarının geçirileceğini ve ön işlem sırasında kaynak dosyadan hangilerinin kaldırılacağını belirlemek için sabit bir ifadeyi veya tanımlayıcıyı test ederler.
yönergesi #define
genellikle anlamlı tanımlayıcıları sabitler, anahtar sözcükler ve yaygın olarak kullanılan deyimler veya ifadelerle ilişkilendirmek için kullanılır. Sabitleri temsil eden tanımlayıcılar bazen sembolik sabitler veya bildirim sabitleri olarak adlandırılır. Deyimleri veya ifadeleri temsil eden tanımlayıcılara makro adı verilir. Bu ön işlemci belgelerinde yalnızca "makro" terimi kullanılır.
Bir makronun adı program kaynak metninde veya diğer bazı önişlemci komutlarının bağımsız değişkenlerinde tanındığında, bu makroya çağrı olarak kabul edilir. Makro adı, makro gövdesinin bir kopyasıyla değiştirilir. Makro bağımsız değişkenleri kabul ederse, makro adını izleyen gerçek bağımsız değişkenler, makro gövdesindeki resmi parametrelerle değiştirilir. Makro çağrısını gövdenin işlenen kopyasıyla değiştirme işlemi, makro çağrısının genişletilmesi olarak adlandırılır.
Pratik anlamda, iki tür makro vardır. Nesne benzeri makrolar bağımsız değişken almaz. İşlev benzeri makrolar bağımsız değişkenleri kabul etmek için tanımlanabilir, böylece işlev çağrıları gibi görünür ve işlev çağrıları gibi davranırlar. Makrolar gerçek işlev çağrıları oluşturmadığından, bazen işlev çağrılarını makrolarla değiştirerek programların daha hızlı çalışmasını sağlayabilirsiniz. (C++ dilinde satır içi işlevler genellikle tercih edilen bir yöntemdir.) Ancak makrolar, bunları tanımlamaz ve dikkatli kullanmazsanız sorun oluşturabilir. İfadedeki uygun önceliği korumak için makro tanımlarında bağımsız değişkenlerle parantez kullanmanız gerekebilir. Ayrıca makrolar yan etkileri olan ifadeleri doğru işleyemeyebilir. Daha fazla bilgi için #define yönergesindeki örne bakıngetrandom
.
Bir makro tanımladıktan sonra, önce özgün tanımı kaldırmadan makroyu farklı bir değere yeniden tanımlayamazsınız. Ancak, makroyu tam olarak aynı tanımda yeniden tanımlayabilirsiniz. Bu nedenle, aynı tanım bir programda birden çok kez görünebilir.
yönergesi #undef
bir makronun tanımını kaldırır. Tanımı kaldırdıktan sonra makroyu farklı bir değerle yeniden tanımlayabilirsiniz. #define yönergesi ve #undef yönergesi sırasıyla ve #undef
yönergelerini #define
ele alır.
Daha fazla bilgi için bkz. ,