Thread overview
auto anahtar sözcüğü
January 16, 2010

C'de de auto D2deki gibi kullanılabiliyor mu ?

Yani


auto a= 11;

şeklinde C'de de kullanılabiliyor mu ?

Eğer kullanılamıyorsa ben auto sözcüğünü neden C'de var olduğunu anlayamam. Hele bu kadar gereksiz iken C++'a da konmasını hiç anlayamam.

Dershanedeki yazıyı değiştirirken dikkat edin. Yada hiç değiştirmeyin. Sonuçta anlam olarak aynı işi yapıyor. Önemli olan neden değil sonuçtur :-)

Eğer d.ershanede böyle anlatırsanız muhtemelen okuyan kişi anlayamayacaktır.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 15, 2010

Bu anahtar sözcüğü yanlış anlamışım... :/ Düşündüğüm gibi çalıştığı halde, "sağ tarafın türü" demek değilmiş. D.ershane'yi de düzelteceğim...

Önce biraz tarihçe:

C: Bu sözcük C'de "yerel değişken" gibi bir anlama gelir. Daha doğrusu, "bu işlevden çıkılırken sonlandır"... Ama C'de zaten özel bir şey belirtilmediğinde bir işlevin parametreleri ve yerel değişkenleri yereldir. O yüzden bu sözcük C'de gereksizdir.

C++: C'den aynı şekilde alınmıştır. Aynı şekilde gereksizdir.

C++0x: Sonunda sözcüğün anlamını değiştirmiştir: "ilklemek için kullanılan değerin türü" anlamına gelir:


// C++0x kodu
auto x = 42;     // int
auto y = foo();  // foo'nun dönüş türü

Ali'nin kafasındaki D: C++0x gibi modern bir dil olduğu için, 'auto''yu C++0x ile aynı anlamda kabul ettim ve üstelik kafamdaki kullanıma da uydu:

// D kodu:
auto x = 42;     // int
auto y = foo();  // foo'nun dönüş türü

D: 'auto', D'de hâlâ C'deki anlamındaymış. Her ne kadar gereksiz olsa da, türün yazılmadığı yerde tekrar ön plana çıkmış. Çünkü D'de türün otomatik olarak çıkarsanabilmesi, ancak ve ancak bir depolama türü (storage class) belirtildiğinde mümkünmüş.

Depolama türleri şunlar (hepsini denemedim):

StorageClass:
       abstract
       auto
       const
       deprecated
       extern
       final
       immutable
       shared
       nothrow
       override
       pure
       scope
       static
       synchronized

Yani sonuçta, eğer elimizde değişebilen bir değişken varsa, ve türünün otomatik olarak çıkarsanmasını istiyorsak, başka bir depolama türü olmadığı için mecburen 'auto' kullanıyoruz.

Sonuçta aynı çalışıyor, ama olayın temeli başkaymış. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 16, 2010

Alıntı (canalpay):

>

C'de de auto D2deki gibi kullanılabiliyor mu ?

Hayır. Belki de en eski C'de anlamı vardı da, C sonradan standartlaşınca bu sözcüğün anlamı kalmadı. Emin değilim. Ama şu anda C'de ve C++'da tamamen boş bir sözcük.

Alıntı:

>

Hele bu kadar gereksiz iken C++'a da konmasını hiç anlayamam.

C++'nın ilk amaçlarından birisi, daha önce yazılmış olan C programlarını bile derleyebilmekti. Ya da, olabildiğince az değişiklikle derleyebilmekti. C++'nın tutunabilmesi için bu çok önemli görülüyordu. Gerçekten de bu felsefe çok işe yaramıştır.

Onun bir etkisi olarak, bütün C anahtar sözcükleri C++'da da vardır.

Önce de dediğim gibi, C++0x'in durumu farklı: bu anahtar sözcüğe benim D2'de aynı sandığım anlamı vermişler: "türünü sen anla" anlamı...

Alıntı:

>

Dershanedeki yazıyı değiştirirken dikkat edin. Yada hiç değiştirmeyin.

Aynı fikirdeyim. Ama bir yandan da sahtecilik yapmış gibi hissediyorum. :) Yine de tek bir cümleyle "doğrusu aslında böyle değildir; şimdilik..." anlamında bir şey eklenebilir.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]