Mam kłótnię z kolegą dotyczącą wytycznych C ++, których należy przestrzegać.
Obecnie projektuje wszystkie swoje biblioteki w ten sposób:
- W nazwach plików używa niekonsekwentnie wielkich i małych liter
- Niektóre z jego nagłówków nie mają żadnego rozszerzenia
Uważam, że brak rozszerzenia jest czymś zarezerwowanym dla standardowych plików C ++ i że stosowanie wielkich liter jest podatne na błędy (szczególnie w przypadku kodu, który ma działać zarówno w systemie Windows, jak i Linux).
Chodzi mu o to, że przestrzega Qt
konwencji (nawet w przypadku kodu, który nie używa Qt) i ciągle mówi: „Jeśli Qt robi to w ten sposób, nie może być źle”.
Teraz staram się zachować otwarty umysł, ale naprawdę źle się czuję, gdy muszę pracować nad jego bibliotekami. Czy istnieje ustalony zbiór zasad dotyczących tego? Czy standard coś o tym mówi?
Dziękuję Ci bardzo.
#define signal
……… („Jeśli Qt robi to w ten sposób, to nie może być źle.”) - Nie mogę powiedzieć, że osobiście zgadzam się ze wszystkimi ich wyborami projektowymi.Qt
. Myślę nawet, że to niesamowita biblioteka, ale niektóre z ich wyborów projektowych są dla mnie naprawdę złe._
w popularnym, szeroko używanym kodzie, ale jest to zdecydowanie niezgodne ze standardem.*.hpp
nagłówka c ++, a wszystkie moje narzędzia „rozumieją”.Odpowiedzi:
Rozszerzenie (lub jego brak) nie spowoduje, o ile wiem, problemów. Powiedziałbym, że całkowite upuszczenie rozszerzenia jest niewygodne, ponieważ utrudnia wyszukiwanie plików nagłówkowych (na przykład za pomocą symboli wieloznacznych * .h i * .hpp) oraz utrudnia identyfikację zawartości pliku (na przykład, jeśli Twój edytor korzysta z rozszerzenia, aby wybrać odpowiedni tryb podświetlania składni).
Z punktu widzenia kodu nie robi to dużej różnicy, nawet obudowa nie jest problematyczna, o ile wszędzie używasz spójnej skrzynki i nie różnicujesz plików tylko na podstawie różnic. Z wygodnego punktu widzenia łatwiej jest trzymać małe litery i mieć rozszerzenie (.h lub .hpp).
Ważniejsze jednak, aby którekolwiek z powyższych stwierdzeń było wybranie jednej konwencji dla całego zespołu programistów i trzymanie się jej . O wiele gorzej jest szukać nazwy pliku i jego nazwy oraz rozszerzenia, którego używa, gdy chcesz coś dołączyć - wszystko to powinno być „zgadywalne” przy znajomości rzeczy, której próbujesz użyć.
źródło
Nie ma reguły (w standardzie), że tylko standardowe pliki nagłówkowe mogą być bez rozszerzenia; nazwa pliku może być dowolna. Ogólna dobra praktyka sugeruje jednak, że:
żadne pliki nigdy nie będą bez rozszerzenia oraz
różne typy plików mają różne rozszerzenia - w szczególności nagłówki C ++ używają innego rozszerzenia (
.hpp
lub.hh
) niż nagłówki, które są akceptowane przez kompilator C.(Niestety, druga zasada jest często naruszana i często widuje się pliki nagłówkowe C ++
.h
. Z własnego doświadczenia mogę zapewnić, że spowoduje to problemy z konserwacją w dalszej części drogi, ale jest to powszechna praktyka.)W odniesieniu do wielkości liter wymagana jest szczególna ostrożność, ponieważ w nazwach plików rozróżniana jest wielkość liter w niektórych systemach, a nie w innych. Widziałem dwie różne reguły, które działają: albo wszystko małymi literami w nazwie pliku, albo nazwa pliku działa dokładnie tak samo jak w przypadku symboli w C ++.
W obu przypadkach ustalasz zasady projektu w drodze konsensusu i wszyscy je przestrzegają.
źródło
Tak. Tak, naprawdę, naprawdę może. Projekt biblioteki brzmi: „Tak bardzo chcemy być Javą”. To totalny bałagan. Biblioteka standardowa jest znacznie lepsza.
Zasadniczo jest to logiczny błąd. Projekt Qt jest warty naśladowania tylko wtedy, gdy można podać logiczne argumenty na temat tego, dlaczego jest dobry, nie jest dobry tylko dlatego, że jest Qt.
źródło
Jak wiem, od standardu 1998, tylko standardowe nagłówki bibliotek byłyby bez .h. Tak więc niestandardowe pliki nagłówkowe C ++ są tradycyjnie nadal zapisywane w formacie .h. Ale pamiętaj, że jest to konwencja, nie możesz używać rozszerzenia, a nawet rozszerzenia .txt, to tak, jakbyś pisał swoje klasy zaczynając od małych liter, wciąż działa, ale to nie jest konwencja.
źródło
Są to konwencje, a nie reguły. Nie ma ograniczeń w przestrzeganiu konwencji, ale konwencje ułatwiają życie, gdy przychodzisz w celach informacyjnych.
zgodnie z rozszerzeniami (.h, .hpp) te pliki, które zostały uwzględnione w c ++ nie muszą mieć rozszerzeń, musisz użyć rozszerzeń, jeśli używasz nagłówków innych niż c ++, takich jak biblioteki c lub biblioteki rozszerzeń.
źródło