Öyle yazmak istemediğim açık ama o kod derleniyor. Yine de int[] olarak değiştireceğim.
Kodun derlenmesinin nedeni biraz ilginç aslında. O, şu kodun derlenebilmesini sağlayan nedenle derlenebiliyor:
char c = 42;
Aslında açıkça bir uyumsuzluk var: sağda int, solda char. Öte yandan programcının ne yapmak istediği de açık: tabii ki 42 değerine sahip olan char oluşturmak istiyor.
Derleyicinin hiç şikayet etmeden kabul etmesinin nedeni, "Value Range Propagation" denen bir derleyici teknolojisi. Walter Bright çok yakın bir zaman önce bununla ilgili bir makale yazmıştı:
http://www.drdobbs.com/blog/archives/2011/02/value_range_pro.html
Aslında o makaleden uyarladığım şu örnek daha çarpıcı:
void foo(int i)
{
char c = i; // <-- DERLEME HATASI
char c3 = i & 0x3F; // <-- ama bu çalışır; süper! :)
}
İkinci satırın çalışmasının nedeni, derleyicinin 0x3f ile maskelendiği için değerin her zaman için bir char'a sığacağını görebilmesidir.
Erdem'in gösterdiği benim kodumun derlenememesi için değerlerden birisinin char'a sığamayacak kadar büyük olması yeter:
char[] dizi = [ 0, 1, 2000 ]; // <-- şimdi DERLEME HATASI
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]