2010-08-29 14 views
13

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

23

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.

+4

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. –

+0

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

+2

W rzeczywistości bardzo niewiele osób korzysta z C99. Po prostu większość kompilatorów C (nawet C90) zaakceptowała // jako rozszerzenie. –

11

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.

+0

+1 za oczywiście poprawną odpowiedź. –

+3

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. –

+3

Godzina? Maksymalnie 5 minut na napisanie skryptu Perla ... –

5

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.

+0

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

+0

@maxschlepzig, który kompilator ** obsługuje ** C99? –

+2

@maxschlepzig: To proste - MSVC. – kusma

0

"//" jest obsługiwany w C99, ale w C89 (który jest zdecydowanie najbardziej obsługiwanym dialektem) nie jest obsługiwany.

1

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.

+3

Właściwie powinieneś używać systemu kontroli wersji do śledzenia starego, nieużywanego kodu;) – kusma

+0

O ile nie testujesz zmiany, która nie powinna zostać zatwierdzona. –

+0

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

8

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++.

+0

+1 bardzo interesujący problem, który podniosłeś –

+2

MISRA C: 2012 (który obejmuje zgodność z C99) pozwoli na komentarze '//' – Andrew

0

To naprawdę nie powinno być problemem w dzisiejszych czasach, chyba że utrzymujesz kod napisany specjalnie do kompilacji ze starymi kompilatorami i podobnymi.

Powiązane problemy