Omawiałem style programowania C z niektórymi uczniami i kiedy mówiliśmy o komentarzach, jeden z nich zauważył, że nie używa komentarzy C++ w kodzie C, ponieważ są one złym pomysłem. Okazuje się, że był oparty na osobistych doświadczeniach z wielowierszowymi komentarzami w C++, ale nie po raz pierwszy usłyszałem to twierdzenie. Czy więc jest //
uważany za szkodliwy, a jeśli tak, to dlaczego?Czy komentarze C++ są uważane za zły styl w C?
Odpowiedz
Zależy od wersji C, z której korzystasz. C 99 pozwala // na komentarz, podczas gdy C 89 nie.
Jeśli chcesz być kompatybilny wstecz, jak to możliwe, nie używaj ich. Ale uważam, że jest to skrajny skrajny przypadek. Mogę się założyć, że prawie wszyscy używają C 99.
Edytuj: Każda ostatnia wersja GCC używa większości C99. Możesz znaleźć więcej informacji w Wikipedia.
Jeśli używasz komentarzy C++ w C, istnieje szansa, że niektóre kompilatory języka C nie zaakceptują Twojego kodu. Uznałbym to za szkodliwe.
+1 za oczywiście poprawną odpowiedź. –
Dobra uwaga. Nie widziałem takiego kompilatora w ciągu ostatnich 20 lat, ale to byłby jedyny powód, dla którego jest szkodliwy. Otoh usunięcie komentarzy C++ z projektu trwa godzinę max. –
Godzina? Maksymalnie 5 minut na napisanie skryptu Perla ... –
C++ - komentarze w stylu zostały dodane do C za pomocą standardu (jeszcze nieuzytywanego) C99. Chociaż sam standard nie jest w pełni obsługiwany w całości, niektóre jego części (takie jak komentarze w stylu C++) są już obsługiwane niemal w każdym kompilatorze. Biorąc pod uwagę, że zostały dodane, oznacza to, że istnieje taka potrzeba, więc łatwo można się domyślić, że nie będzie to uważane za zły styl - zwłaszcza jeśli wytyczysz sobie wytyczne dotyczące tego, gdzie go użyć.
Jedynym powodem, dla którego nie należy ich używać, jest napisanie dobrze skomponowanego programu kompilacyjnego C89.
C99 nie jest szeroko obsługiwany? Które z dostępnych obecnie kompilatorów C nie obsługuje C99? Mam na myśli, przynajmniej większość C99, w tym // - Komentarze ... – maxschlepzig
@maxschlepzig, który kompilator ** obsługuje ** C99? –
@maxschlepzig: To proste - MSVC. – kusma
"//" jest obsługiwany w C99, ale w C89 (który jest zdecydowanie najbardziej obsługiwanym dialektem) nie jest obsługiwany.
Jednym z najczęstszych powodów, dla których ludzie używają //
zamiast /* */
jest to, że można "zagnieździć" pierwsze, a nie drugie, a więc można skomentować kod, który zawiera komentarze. Ale naprawdę powinieneś używać #if 0
do komentowania kodu w C tak czy inaczej.
Właściwie powinieneś używać systemu kontroli wersji do śledzenia starego, nieużywanego kodu;) – kusma
O ile nie testujesz zmiany, która nie powinna zostać zatwierdzona. –
Nie, nadal powinieneś używać systemu kontroli wersji. System VCS powinien już mieć kopię kodu, aby można go było bezpiecznie usunąć. Wtedy jest to prosta sprawa wskrzeszenia go z VCS później. – kusma
Komentarze w C++ są niedozwolone zgodnie ze standardem MISRA-C 2004. Niektóre branże (w szczególności motoryzacyjne) nagradzają kod zgodny z MISRA, a zatem komentarze w C++ są niedozwolone. Wydaje mi się, że to samo dotyczy innych narzędzi do sprawdzania kodu statycznego, takich jak LDRA, itd ...
To nie czyni ich z natury złymi, ale oznacza to, że jeśli dostaniesz się do pewnych branż i chcesz pracować zawodowo, będzie aktywnie zniechęcać się do używania komentarzy w stylu C++.
+1 bardzo interesujący problem, który podniosłeś –
MISRA C: 2012 (który obejmuje zgodność z C99) pozwoli na komentarze '//' – Andrew
To naprawdę nie powinno być problemem w dzisiejszych czasach, chyba że utrzymujesz kod napisany specjalnie do kompilacji ze starymi kompilatorami i podobnymi.
moje standardowe opcje gcc to '-ansi -pedantic -W -Wall', które powodują, że gcc jest bardzo rygorystyczny w odrzucaniu i ostrzeganiu o złych kod. Odrzuca również komentarze "//". Możesz użyć '-std = c99' zamiast' -ansi', jeśli chcesz akceptować pliki C99, ale zachowujesz ścisłość, ale wolę, aby mój kod C był jak najbardziej kompatybilny. –
Szczerze mówiąc, nie mam takich doświadczeń w opcjach kompilatora. Wciąż uczę się poprawnie używać wskaźników;). Byłem facetem PHP, który sam dostał się do C/C++. Po prostu znam różnicę, ponieważ sam miałem to samo pytanie, kiedy byłem w liceum. – Codeacula
W rzeczywistości bardzo niewiele osób korzysta z C99. Po prostu większość kompilatorów C (nawet C90) zaakceptowała // jako rozszerzenie. –