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.
- 1. W Simulink, czy bloki Goto i From są ogólnie uważane za zły styl?
- 2. Czy są jakieś scenariusze, w których ostrzeżenie C4172 Visual C++ nie powinno być uważane za błąd?
- 3. Zagnieżdżone komentarze w C++
- 4. Co się // @include w C++ komentarze
- 5. Autogenerate komentarze funkcji C/C++ w Eclipse
- 6. Jakie funkcje są uważane za zaawansowane python?
- 7. Czy jest to uważane za SFINAE?
- 8. Czy kody statusu HTTP są uważane za "magiczne liczby"?
- 9. Czy drzewa decyzyjne (np. C4.5) są uważane za uczenie nieparametryczne?
- 10. Zobacz komentarze dll w C#
- 11. Czy sprawdzanie poprawności pól w konstruktorze i seter jest uważane za zły kod nadmiarowy?
- 12. Czy wszystkie nagłówki w/usr/include są uważane za publiczne API w MAS?
- 13. Listy są takie same, ale nie są uważane za równe?
- 14. Symulacja C-styl dla pętli w python
- 15. Styl funkcji API C
- 16. Czy jest to uważane za poprawne C++ 11 lub C++ 14? Czy też gcc/clang robi to źle?
- 17. Czy w CSS dostępne są komentarze wielowierszowe?
- 18. zły połączenia z podpisem const w C
- 19. Jakie operacje w Javie są uważane za atomowe?
- 20. Czy wiele odwołań before_action wywołuje zły styl kodu?
- 21. "Zły klucz". wyjątek podczas odszyfrowywania za pomocą RSACryptoServiceProvider (C# .NET)
- 22. Czy dane szyfrowane w Silverlight są odszyfrowywane za pomocą C++?
- 23. RyuJIT C# zły wynik suma z/zoptymalizować
- 24. C++ 0x lambdas styl kodowania
- 25. Czy ciągi .NET naprawdę powinny być uważane za niezmienne?
- 26. C#: Zły projekt klasy (pierwszy OOP)
- 27. Czy są jakieś "wzorce projektowe" w C?
- 28. Czy przyjaciele są w C++ wzajemne?
- 29. Dlaczego subrasy mercurial są uważane za cechę ostatniej instancji
- 30. Alokacja stosów w C
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. –