Alt çizgi ile değişkenler / üyeler başlatılabilir derleyici bulmaca?


12

Liseden beri bana böyle değişkenleri tanımlayan öğretildi:

int _a;

veya

int __a;

kötü uygulama olarak düşünülmelidir, çünkü bu sonunda geçici değişkenleri adlandırmak için altçizgi ile başlayan değişkenleri kullanan derleyicileri bulmaktadır.

Bildiğim kadarıyla bu, bazı kişilerin adın sonunda alt çizgiyi taşımayı sevmesinin nedeni budur:

int a_;

Ancak, alt çizgi başlangıç ​​değişkenleri kullanan her yerde kod bir sürü görüyorum. Ve bu kod hem Visual Studio 2010 hem de g ++ 4.x ile oldukça iyi bir şekilde oluşturulmuştur.

Merak ediyorum: bu günümüzde bir sorun değil mi? Modern derleyiciler konvansiyonları adlandırmak konusunda daha mı akıllı?


Gerçek bir yanıt değil, ancak Microsoft'un C ++ derleyicileri bu konuda özellikle daha yumuşaktır, çünkü Microsoft'un özel üye değişkenlerden önce alt çizgileri (en azından C #) kullanması için dahili stili budur. G ++ 'nın hala önde gelen alt çizgilerle ilgili sorunları olabileceğini biliyorum.
KChaloux

6
Bu sorunun cevaplarını yararlı bulabilirsiniz.
Blrfl

1
@KChaloux, Microsoft'un C ++ derleyici ekibinin 20 yılı aşkın bir süredir var olduğunu düşünüyorsanız, C # ekibindeki bazı kişilerin alışkanlıklarına dayanarak kabul edilebilir tanımlayıcı adları ile ilgili kuralları oluşturdu, Microsoft'un nasıl çalıştığını bilmiyorsunuz :-). Cidden, ilk C ++ derleyicilerini piyasaya sürdüklerinden bu yana 21 yıl geçti ve bu kurallar o kadar ileri ya da orijinal C derleyici kod tabanına geri döndü.
Kate Gregory

@Kate sadece C # 'da kullandıklarını bildiğime işaret ediyordum. Microsoft'un C ++ derleyicisini kullanmıyorum veya oradaki ortam hakkında çok fazla şey bilmiyorum, bu yüzden C ++ ile yaşadığım deneyimlerden C ++ 'da bu adlandırma stilini kullanmaları için çıkarım yapıyordum. Yapılan Asla herhangi C # kural ilk geldiği iddiaları.
KChaloux

Yanıtlar:


17

Görünüşe göre önek alt çizgilerinin kötü uygulama nedenini yanlış anlıyorsunuz. Kısaca belirtmek gerekirse, C ve C ++ standardının bu öneki uygulama ayrıntıları, örneğin standart kitaplık uygulaması için ayırmasıdır. (_ ve __'nin aynı şeyler için ayrılmadığını unutmayın, yorumlara bakın)

Adlar kapsam dahilinde olsa bile (ad alanı, sınıf vb.), Bu önekleri kullanan ve siz de kullanırsanız kodunuzu sessizce kırabilecek bazı genel adlar, özellikle makrolar olabilir.

Yani, temel olarak, çoğu zaman bu öneki kullanmak güvenlidir, ancak bunları kullanmazsanız, adınızın uygulama adlarıyla hiçbir zaman çakışmayacağına dair% 100 garantiniz vardır.

Bu yüzden şüphesiz bu öneki kullanmayın.


3
yorumlarınız iki alt çizginin önekine uygulanır, ancak tek bir alt çizgiye uygulanmaz
Kate Gregory

1
@KateGregory: Başta alt çizgisi olan adlar, uygulama tarafından genel ad alanındaki adlar için kullanılmak üzere ayrılmıştır. Başında bir alt çizgi ve ardından ikinci bir alt çizgi veya sermaye herhangi bir kullanım için ayrılmıştır (bunlar uygulama tarafından makrolar için kullanılabilir). Bu nedenle, yerel kapsamlarda önde gelen bir alt çizgi ve ardından küçük bir harf iyi olabilir, ancak açma ve ayrılmış bir ad kullanmaktan kaçınmak en iyisidir.
Bart van Ingen Schenau

4
@KateGregory: Üye olarak _limitbir hata değil, küresel bir işlevdir. "İstisnasız, önde gelen alt çizgi kullanmayın" diyen basit bir politikaya sahip olmanın, bazı bağlamlarda değil diğerlerinde izin veren bir politikadan daha iyi olduğunu düşünüyorum. Ancak bu konuda farklı olmayı kabul edebiliriz. Ve net olmak gerekirse, diğer yerlerde alt çizgilerle ilgili hiçbir sorunum yok.
Bart van Ingen Schenau

2
@BartvanIngenSchenau: sadece ilgi için: "sadece alt sınıfları sadece ve sadece özel sınıf üyeleri için kullanın" gibi basit bir politika teknik sorunlara yol açmamalıdır, sizce bu doğru mu?
Doc Brown

1
@KateGregory Sadece açıklığa kavuşturmak için, kuralların cevabımda söylediğimden daha kesin olduğunu kabul ediyorum; ancak kuralların tam olarak ne olduğunu hatırlamaya çalıştığımda hafızamın hassasiyet eksikliğini yansıtıyor. İstisnaları (özellik değil) bilmek zorunda kalmayacağımdan, özellikle bu kadar önemli olmayan kurallar için takip edilmesi kolay genel kuralları tercih ederim. Eğlenceli olan şey, anlamsal hareketle bunu hatırlamaktan daha rahat olmam. Belki de şimdi düşündüğüm eğlenceli değil ...
Klaim

16

İki alt çizgi kullanmak kesinlikle kötüdür - derleyiciye özel uygulama ayrıntıları için ayrılmıştır. Bu, bir alt çizgi kullanmak için geçerli değildir.

Bazı insanlar alt çizgilerden nefret eder. İster bir şey çağırın, ister - m_indexya highest_priceda _aonu mahrum ederler. 25 yıl önce, diğer her satırda alt pikseli atlayarak, sayfaya daha fazla satır sığdıran belirli bir IBM yazıcıdan (çok popüler bir yazıcı) bahseden biriyle çalıştım. Bu, notlar için veya büyük sayı aralıklarının çıktısı için iyiydi, ancak alt çizgilerinizin yarısını görünmez yapma koduna etkisi vardı. (Evet, gerçekten!) O nesilden gelen insanlar genellikle o yazıcıyla etkileşimden ya da alt çizgilerin kullanılmayacağı konusunda kendilerini yenen biriyle çalışmasından kaynaklanan mantıksız alt çizgi nefretine sahiptir.

Çoğu insan karışık durumda (biz, var demedi bir seçenek, Fortran) daha okunabilir bir yaklaşım kullanarak bulmak: mIndex, HighestPrice, adaha önce çizili örneklere oldukça iyi stand up. Size iki kural vereceğim:

  • asla iki alt çizgiyle hiçbir şey (işlev, değişken, makro, typedef) başlatmayın
  • tutarlı bir kural seçin (örneğin _limitfonksiyon parametreleri m_limitiçin, üye değişkenler için asla alt çizgi, deve kılıfı kullanmayın, her kelimeyi büyük harfle yazmayın, Macarca, bir şey ) ve ona bağlı kalın. Bazen başlangıçta altçizgi, bazen de son, bazen onları kullanmayan ve beş farklı kasa konvansiyonu ile uğraşmayın. Tutarlı olun.

Söz konusu yazıcı çoktan gitti. Zamanında bir alt çizgi kullanmak isterseniz, çekinmeyin. Ama anlayın, alt çizgi nefretler hala var.


"İster m_index, ister en yüksek_price ya da _a - bir şeyi çağırsınlar. Standartlarda, özellikle tanımlayıcılarda önde gelen alt çizgilerin kullanımına ilişkin kurallar olduğundan bahsetmediniz. Neden bu kadar kolay önlendiğinde sorun sorsun ki? stackoverflow.com/a/228797
Max Barraclough

hiç bahsetmedin mi? İlk cümleyi tekrar okuyun.
Kate Gregory

"Bu, bir alt çizgi kullanmak için geçerli değildir" hikayenin tamamı değildir, çift alt çizgi ile başlamanın oldukça kesin bir hayır olduğunu, ancak "Küresel ad alanında saklıdır: vurgulamak". Neden ateşle oynayalım?
Max Barraclough

1
tamam, noktayı kaçırıyorsun. İkinci paragraf genel olarak alt çizgi karşıtı olan insanların varlığını tartışıyor. Başlıca alt çizgiler değil. Tüm alt çizgiler. Evet, iki alt çizgiyle ilgili kurala ek olarak, önde gelen alt çizgiler, ardından da büyük harf, küresel kapsamda alt çizgiler vb. Ve bu insanlar yanlış demeyi seviyorum. Lider olmayan alt çizgilere itiraz etmek için standartlara dayalı bir neden yoktur. Ama yine de insanlar bunu yapıyor.
Kate Gregory

Biz burada aynı fikirde değiliz. Evet, bazen tanımlayıcıyı tek bir alt çizgiyle başlatmak yasaldır. Yukarıda söylediğim gibi, neden ateşle oynayalım? Asla bir alt çizgi ile tanımlayıcı başlatmam; Bir kod kokusu olarak görüyorum (eğer bir koku 'görmek' söylenebilir eğer :-P). Bu şekilde, kuralların tam olarak ne zaman yasal olduğunu söyleyen özelliklerinden asla endişelenmem.
Max Barraclough
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.