D Programlama - Koşullu Derleme
Koşullu derleme, C ve C ++ 'da #if / #else / #endif'e benzer şekilde hangi kodun derleneceğini ve hangi kodun derlenmeyeceğini seçme işlemidir. Derlenmemiş herhangi bir ifade hala sözdizimsel olarak doğru olmalıdır.
Koşullu derleme, derleme zamanında değerlendirilebilen koşul kontrollerini içerir. İf, for, while gibi çalışma zamanı koşullu ifadeleri koşullu derleme özellikleri değildir. D'nin aşağıdaki özellikleri koşullu derleme içindir -
- debug
- version
- statik eğer
D'de Hata Ayıklama İfadesi
Ayıklama programı gelişimi sırasında faydalıdır. Hata ayıklama olarak işaretlenen ifadeler ve ifadeler, yalnızca -debug derleyici anahtarı etkinleştirildiğinde programa derlenir.
debug a_conditionally_compiled_expression;
debug {
// ... conditionally compiled code ...
} else {
// ... code that is compiled otherwise ...
}
Else cümlesi isteğe bağlıdır. Yukarıdaki hem tek ifade hem de kod bloğu yalnızca -debug derleyici anahtarı etkinleştirildiğinde derlenir.
Tamamen kaldırılmak yerine, satırlar hata ayıklama olarak işaretlenebilir.
debug writefln("%s debug only statement", value);
Bu tür satırlar programa yalnızca -debug derleyici anahtarı etkinleştirildiğinde dahil edilir.
dmd test.d -oftest -w -debug
D'de Hata Ayıklama (etiket) İfadesi
Hata ayıklama ifadelerine, programa seçici olarak dahil edilecek isimler (etiketler) verilebilir.
debug(mytag) writefln("%s not found", value);
Bu tür satırlar programa yalnızca -debug derleyici anahtarı etkinleştirildiğinde dahil edilir.
dmd test.d -oftest -w -debug = mytag
Hata ayıklama bloklarının etiketleri de olabilir.
debug(mytag) {
//
}
Aynı anda birden fazla hata ayıklama etiketini etkinleştirmek mümkündür.
dmd test.d -oftest -w -debug = mytag1 -debug = mytag2
D'de Hata Ayıklama (düzey) İfadesi
Bazen hata ayıklama ifadelerini sayısal düzeylerle ilişkilendirmek daha kullanışlıdır. Artan seviyeler daha detaylı bilgi sağlayabilir.
import std.stdio;
void myFunction() {
debug(1) writeln("debug1");
debug(2) writeln("debug2");
}
void main() {
myFunction();
}
Belirtilen seviyeye eşit veya daha düşük olan hata ayıklama ifadeleri ve blokları derlenecektir.
$ dmd test.d -oftest -w -debug = 1
$ ./test
debug1
D'deki Sürüm (etiket) ve Sürüm (düzey) İfadeleri
Sürüm, hata ayıklamaya benzer ve aynı şekilde kullanılır. Else cümlesi isteğe bağlıdır. Sürüm, temelde hata ayıklama ile aynı şekilde çalışsa da, ayrı anahtar kelimelere sahip olmak, ilgisiz kullanımlarını ayırt etmeye yardımcı olur. Hata ayıklamada olduğu gibi, birden fazla sürüm etkinleştirilebilir.
import std.stdio;
void myFunction() {
version(1) writeln("version1");
version(2) writeln("version2");
}
void main() {
myFunction();
}
Belirtilen seviyeye eşit veya daha düşük olan hata ayıklama ifadeleri ve blokları derlenecektir.
$ dmd test.d -oftest -w -version = 1
$ ./test
version1
Statik eğer
Statik if, if ifadesinin derleme zamanı eşdeğeridir. Tıpkı if ifadesi gibi, statik if mantıksal bir ifade alır ve onu değerlendirir. İf ifadesinden farklı olarak, statik if, yürütme akışıyla ilgili değildir; daha ziyade programa bir kod parçasının dahil edilip edilmeyeceğini belirler.
İf ifadesi, daha önce söz dizimsel ve anlamsal olarak gördüğümüz is operatörüyle ilgisizdir. Derleme zamanında değerlendirilir. 0 veya 1 şeklinde bir int değeri üretir; parantez içinde belirtilen ifadeye bağlı olarak. Aldığı ifade mantıksal bir ifade olmasa da, is ifadesinin kendisi bir derleme zamanı mantıksal ifadesi olarak kullanılır. Koşullar ve şablon kısıtlamalarında özellikle yararlıdır.
import std.stdio;
enum Days {
sun,
mon,
tue,
wed,
thu,
fri,
sat
};
void myFunction(T)(T mytemplate) {
static if (is (T == class)) {
writeln("This is a class type");
} else static if (is (T == enum)) {
writeln("This is an enum type");
}
}
void main() {
Days day;
myFunction(day);
}
Derlediğimizde ve çalıştırdığımızda aşağıdaki gibi bazı çıktılar alacağız.
This is an enum type