Uzantısız C ++ başlık dosyalarına sahip olmak iyi bir uygulama mı?


9

Takip etmem gereken C ++ yönergelerine ilişkin bir meslektaşımla tartıştım.

Halen tüm kütüphanelerini şu şekilde tasarlamaktadır:

  • Dosya adlarında tutarsız büyük ve küçük harfler kullanıyor
  • Bazı başlıklarında uzantı yok

Hiçbir uzantısına sahip C ++ standart dosyaları için ayrılmış bir şey olduğunu ve büyük harf kullanmanın hata eğilimli olduğuna inanıyorum (özellikle Windows ve Linux üzerinde çalışması amaçlanan kod ile uğraşırken).

Onun anlamı, Qtkuralları (Qt kullanmayan kodlar için bile olsa) takip ediyor ve şöyle devam ediyor: "Qt bu şekilde yaparsa, o zaman kötü olamaz."

Şimdi açık fikirli olmaya çalışıyorum, ancak kütüphaneleri üzerinde / kütüphaneleri üzerinde çalışmam gerektiğinde gerçekten kötü hissediyorum. Bununla ilgili ortak bir kurallar dizisi var mı? Standart bu konuda bir şeyler söylüyor mu?

Çok teşekkür ederim.


3
#define signal……… (“Eğer Qt bu şekilde yaparsa, o zaman kötü olamaz.”) - Tüm tasarım seçeneklerine şahsen katıldığımı söyleyemem.
justin

@Justin: Ben de karşıyım Qt. İnanılmaz bir kütüphane olduğunu düşünüyorum, ancak tasarım seçeneklerinden bazıları bana gerçekten yanlış geliyor.
ereOn

1
@ Justin _Popüler, yaygın olarak kullanılan kodla başlayan makrolar gördüm , ama kesinlikle standarda aykırı.
Luchian Grigore

1
ancak uzantıları olmayan başlıkları önlemek için gerçek bir neden: birincil IDE ve metin düzenleyicim bunları otomatik olarak tanımayacak. i sadece *.hppbir c ++ başlığı için kullanın ve tüm araçları "olsun".
justin

5
Qt tam olarak bu kuralı kullanır çünkü akıllı programcılar yok. Bu , başlıklarınızın yeni Qt başlıklarıyla çakışmayacağı anlamına gelir .
MSalters

Yanıtlar:


16

Uzatma (veya eksikliği), bildiğim kadarıyla size neden olmayacak. Başlık dosyalarının (örneğin, * .h ve * .hpp joker karakterleriyle) aranmasını zorlaştırdığı ve örneğin bir dosyanın (örneğin, düzenleyiciniz uygun sözdizimi vurgulama modunu seçmek için uzantıya güvenir).

Kod açısından bakıldığında, çok fazla fark yaratmaz, kasa bile her yerde tutarlı bir durum kullandığınız ve dosyaları ayırt etmek için yalnızca vaka farklılıklarına güvenmediğiniz sürece sorunlu değildir. Kolaylık açısından küçük harfe sadık kalmak ve bir uzantıya (.h veya .hpp) sahip olmak daha kolaydır.

Bununla birlikte, yukarıdakilerden herhangi birinin, tüm geliştirme ekibiniz için bir sözleşme seçmek ve ona bağlı kalmak daha önemlidir . Bir dosyanın nasıl kasalı, adlandırılmış ve bir şey eklemek istediğinizde hangi uzantıyı kullandığını aramak çok daha kötüdür - bunların hepsi kullanmaya çalıştığınız şeyin bilgisi ile "tahmin edilebilir" olmalıdır.


Bir konvansiyon seçmek ve ona bağlı kalmak kötü bir fikir değildir, ama mevcut konvansiyon iyileştirilebilirse ne olur? Bu durumda, belki de rotayı değiştirmek iyi bir fikirdir.
kotlinski

@kotlinski Bu, durumu iyileştirmek için yapabileceğiniz hiçbir şeyin olmadığı durumlardan biridir, çünkü seçtiğiniz her şey bir tercih meselesidir. Aslında, bazı uzantılara sahip olmanın hiç yoktan iyidir, çünkü işletim sistemi (okuma, Windows), uzantıya göre dosyayı hangi programın açacağını belirleyebilir.
Paul

@PaulManta: Ama burada kendinize karşı tartışmıyor musunuz? İlk olarak, hiçbir şeyi iyileştirmenin bir yolu olmadığını söylüyorsunuz. Sonra, bir uzantıya sahip olmaktan daha iyi olduğunu söylüyorsunuz. Bu bir çeşit yenilgi tavırdır ve hiçbir değişikliğin mümkün olmadığını söyler.
kotlinski

@kotlinski Genel olarak, bu, ne kadar eski kodla çalışacağınıza, hepsini yeni sözleşmeye değiştirmenin uygun olup olmayacağına ve karıştırma sözleşmelerinin etkisinin ne olacağına bağlıdır. Bu durumda Paul Manta ile hemfikirim - bu çoğunlukla kişisel tercih, bir uygulama çoğu zaman pratik nedenlerle tercih ediliyor.
Adam Bowen

1
@kotlinski Hiçbir şeyi geliştirmenin bir yolu yok, ama işleri daha da kötüleştirmenin yolları var. Bu tartışma, boşluklar-sekmeler tartışması kadar anlamsızdır. Sadece bir kongre seçin ve bir şeyler yapın.
Paul

6

(Standartta) yalnızca standart başlık dosyalarının uzantısız olabileceğine dair bir kural yoktur; dosya adı hemen hemen istediğiniz her şey olabilir. Bununla birlikte, genel iyi uygulama şunları önermektedir:

  1. hiçbir dosya uzantısız olamaz ve

  2. farklı dosya türleri farklı uzantılara sahiptir; özellikle, C ++ başlıkları bir C derleyicisi için kabul edilebilir başlıklardan farklı bir uzantı ( .hppveya .hh) kullanır.

(Maalesef, ikinci kural sıklıkla ihlal edilir ve biri genellikle C ++ başlık dosyalarını görür .h. Kişisel deneyimden, bunun bakım sorunlarına yol açacağından emin olabilirim, ancak yaygın bir uygulamadır.)

Durumla ilgili olarak, dosya adları bazı sistemlerde büyük / küçük harf duyarlı olduğundan, diğerlerinde değil büyük özen gerektirir. İşe yarayan iki farklı kural gördüm: ya dosya adındaki her şey küçük harfle ya da dosya adı C ++ sembollerindeki durumla aynı kuralları izler.

Her iki durumda da, fikir birliği ile proje için kurallar belirlersiniz ve herkes bunları izler.


1
Bu konuda tamamen James'le birlikteyim. Aynı uzantıya sahipse, 2 farklı başlık dosyasında uygun şekilde çalışacak araçları almak için bir kabus yapar.

@TomTanner Uzantıları olmayan dosyalarınız varsa daha da kötüdür. Çoğunlukla bir Unix ortamında çalıştım ve her zaman beni (ve neden olan sorunları) çalıştırılabilir dosyaların bir uzantısı olmadığını hayal kırıklığına uğrattı.

6
If Qt does it that way, then it can't be bad.

Evet. Evet, gerçekten, gerçekten olabilir. Kütüphane tasarımları "Biz Java olmak istiyoruz." Bu tam bir karmaşa. Standart kütüphane çok daha iyi.

Ayrıca, temelde, bu mantıklı bir yanlıştır. Qt'un tasarımı sadece neden iyi olduğu hakkında mantıklı argümanlar verebiliyorsanız taklit etmeye değer, sadece Qt olduğu için iyi değil.


Ampirik bir argüman. Birçok kişi tarafından kullanılan büyük bir yazılım ürünüdür. Bu adlandırma kuralı seçimi önemli sorunlara neden olsaydı, şimdiye kadar bilinecek ve muhtemelen değiştirilecekti. Durum böyle olmadığından, çok kötü olamaz. Bu, bunun en iyi çözüm olduğu anlamına gelmez.
H.Rittich

0

Bildiğim gibi, 1998'den beri standart, sadece standart kütüphane başlıkları .h olmadan olurdu. Standart olmayan C ++ başlık dosyaları geleneksel olarak hala .h ile yazılır. Ancak bunun bir kural olduğunu, uzantı veya hatta .txt uzantısı kullanamayacağınızı aklınızda bulundurun, sınıflarınızı küçük harfle başlayarak yazıyorsunuz, hala çalışıyor, ancak kural değil.


3
Btw "Eğer Qt bu şekilde yaparsa, o zaman kötü olamaz." bu gerçekten kötü bir argüman ...

2
Standardın kullanıcı tanımlı başlıkların nasıl isim olması gerektiği hakkında söyleyecek bir şeyi yoktur. Yalnızca standart başlıkların adlarını belirtir.
Mike Seymour

0

Bunlar kurallar değildir, kurallara uymak için herhangi bir kısıtlama yoktur, ancak referans olarak geldiğinizde kurallar hayatı kolaylaştırır.

c ++ 'a dahil edilen dosyaların uzantılarına (.h, .hpp) göre uzantılara sahip olması gerekmez, c kütüphaneleri veya boost kitaplıkları gibi c ++' dan başka başlıklar kullanıyorsanız uzantıları kullanmanız gerekir.

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.