Sabitleri tüm büyük harflerle adlandırmanın geçmişi nedir?


20

Tüm büyük harflerde sabit adlandırma kuralının ardındaki tarih nedir?

Sezgim, insanların önişlemci makrolarını tüm büyük harflerle adlandırmak için etkili bir şekilde ayrı bir ad alanında yaşayacakları ve isim çarpışmalarını önleyecekleri bir uygulama geliştirdikleri C önişlemcisi ile başladığıdır. Benim inancım, bu uygulamanın, önişlemci olmayan sabitlere ( enums, constdeğişkenler) de uygulanacak şekilde yanlış anlaşıldığı ve piç haline getirildiğidir .

Önişlemci makrolarını tüm büyük harflerle adlandırmak benim için gerçekten yararlı görünüyor. Genel sabitleri bu şekilde adlandırmak, çok fazla değil (ve makro isimleriyle çarpışmalar oluşturuyorsa).

Ben üs dışı mıyım? Sabitleri kapitalize etme uygulaması C'den önce mi geldi?


3
Sanırım tam buradasın. İlk diller büyük harfle hemen hemen her şeye sahipti, küçük harf kullanımı daha sonra moda oldu. Erken C kitaplarında tipik olarak consttanımlayıcıların küçük harf ve #definesbüyük harf olduğu görülmektedir. Java, sabitler ve diğer diller için büyük harf kabul etti, ancak bu son biraz yanlış olabilir. Daha fazla araştırmaya ihtiyaç var! :)
David Arno

Muhtemelen C veya montajcının doğası nedeniyle @DavidArno ile hemfikirim.
Snoop

Yanıtlar:


13

C için, C Programlama Dili'nin (diğer adıyla K&R) ilk baskısı, önişlemci makroları hakkındaki sezginizin doğru olduğunu göstermektedir:

Sembolik sabit adlar genellikle büyük harfle yazılır, böylece küçük harfli değişken adlarından kolayca ayırt edilebilirler.

Birçok yönden bu, makroların büyük harflerle etiket, opcode, kayıt isimleri ve diğer her şeyle birlikte tanımlandığı montaj dilinden bir engeldi. AT & T tarzı montajın ortaya çıkışı bazı platformlarda değişti, ancak bence küçük harfleri destekleyen terminallerin bir şey haline gelmesinden ve Unix'in "küçük harf işletim sistemi" olarak adlandırdığım şeyden büyük ölçüde etkilendiğini düşünüyorum.

Diğer iki noktada, .500 vuruyorsunuz:

Sıralama

İkinci baskı yayınlanıncaya enumkadar tanımlanmış, numaralandırma sabitleri olarak adlandırılmış ve sabitler bölümünde ele alınmıştır. A ile tanımlanan sabitler enumsembollerle temsil edildiğinden, onları sembolik sabitler yapar, bu da önerilen kuralı izleyecekseniz büyük harfle adlandırılmalıdır. (Önişlemci makroları gibi, hiçbir şey başka türlü yapmanıza engel olmaz.)

Buradaki sonuç, takip eden bazı dillerden farklı olarak, C enum, türlerin kendilerinin farklı olduğu birinci sınıf bir tür olarak davranmaz , numaralandırma değerleri her türe özgüdür ve başkalarında yeniden kullanılabilir. Bunun yerine, #definetanımlayıcıları eklenmiş tamsayı dizileri üreten için etkili bir stenograf . Bu yapar

enum foo  { BAR, BAZ };
enum quux { BLETCH, BAZ };

geçersiz çünkü tüm semboller kapsamı paylaşır ve BAZyeniden tanımlanır. (Bu, ön #defineişlemciye göre bir iyileştirme idi, bu da o zaman bir diğerini klozet hakkında uyarmadı.) Dahası, C onları karıştırıp karıştırmamanız umursamıyor çünkü hepsi sadece tamsayılar,

enum foo  { BAR, BAZ };
enum quux { BLETCH, BLRFL };

enum foo variable = BLETCH;

tüm uyarılar açık olan modern bir derleyicide bile tamamen geçerlidir.

İnş

Not: constAnahtar sözcük 1981'de Stroustrup'un C With Classes (C ++ 'a dönüşen) ile ortaya çıktı ve sonunda C tarafından kabul edildi. İsim seçimi talihsiz, çünkü K & R'nin şu anda ne dediğimiz anlamına gelmek için sabit terimini kullanmasıyla çarpışıyor değişmez (örneğin 38, 'x'ya da "squabble"). İkinci baskıdaki metin bunu yansıtacak şekilde yeniden yazılmamıştır.

Beyan edilen değişkenler constfarklı bir hikaye çünkü hala değişkenler. Değiştirilmeleri gerekiyordu, ancak sabit bir değişken kavramının, jumbo karideslerden başka bir tartışma için yemden daha mantıklı olup olmadığı. Durum ne olursa olsun, C asla bu konuda gerçekten ciddi değildi, çünkü standart sadece derleyiciyi değiştirmeye çalıştığınızda tanı koymasını gerektirir. Bir değişiklik derlenir ve yürütülürse, gerçek davranış tanımsızdır.

Değişkenler olarak, her şeyin constküçük harfle adlandırılma kuralını izlemesi mantıklıdır . Değişmez değerleri temsil etmek için kullanmanın bazı güvenlik avantajları vardır, ancak değeri elde etmek için derleme birimleri arasında ulaşmak zorunda kalırsanız iyi bir optimizasyon sağlamaz.

Olmadıkları şey K&R anlamında sabittir ve bu nedenle tanımlayıcıları büyük harf olmamalıdır. Bazı insanlar bunları bu şekilde kullanır, ancak birkaç özel durum dışında önerdiğim bir uygulama değildir.


Bunu kabul edeceğim ve cevabı takdir etsem de, enumbirinci sınıf tür olmama ve yeniden tanımlama çatışmaları hakkındaki paragraflar alakalı görünmüyor. K&R'nin ilk baskısının "sembolik sabitler" için olan uygulamayı tanımlaması yeterlidir. (Ayrıca, K&R'nin ikinci baskısının kopyasını kontrol ettikten sonra, örneklerinin enumtüm büyük harflerde tüm isim sabitlerini
görmesini sağladım
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.