Из MISRA C 2004:
Правило 2.2 (обязательное): Исходный код должен использовать только комментарии в стиле /* … */.
Это исключает использование комментариев в стиле //
C99 и комментариев в стиле C++, поскольку они не разрешены в C90
. Многие компиляторы поддерживают стиль комментариев //
как расширение стиля C90
. Использование //
в директивах препроцессора (например, #define
) может варьироваться. Также смешивание /* … */
и //
несовместимо. Это больше, чем проблема стиля, поскольку разные (до C99
) компиляторы могут вести себя по-разному.
Я думаю, это все объясняет, но я все же добавлю свое объяснение со ссылками.
В оригинальном C (до C99) не было //
комментариев. C++
ввел префикс комментария с двойной косой чертой //
как способ комментировать отдельные строки.
Для большей ясности давайте построчно:
Это исключает использование комментариев в стиле //
C99 и комментариев в стиле C++, поскольку они не разрешены в C90
.
В настоящее время современные компиляторы, такие как gcc
, начали поддерживать такие //
и в режиме C90, но по-прежнему будут выдавать предупреждение вроде:
предупреждение: комментарии в стиле C++ не разрешены в C90
но рекомендуется использовать комментарии /*..*/
в C90 C.
Многие компиляторы поддерживают стиль комментариев //
как расширение стиля C90
.
Именно об этом я и сказал выше, но все же не рекомендуется использовать //
в C90 C, так как код не будет переносимым. Например, этот код будет скомпилирован с gcc
, но с другим компилятором, у которого нет расширения, он не скомпилируется.
Использование //
в директивах препроцессора (например, #define
) может варьироваться.
Я думаю смысл этого ясен. В нем говорится, что использование //
не будет согласованным в директивах препроцессора.
Также смешивание /* ... */
и //
несовместимо.
Как? Это возможно. Как я упоминал выше, это зависит от компилятора. В C99 C это будет в основном согласовано, но если вы говорите о компиляторах до C99, имеет значение, поддерживают они или не поддерживают комментарии //
.
Это больше, чем проблема стиля, поскольку разные (до C99
) компиляторы могут вести себя по-разному.
Да, это так. Так как это MISRA 2004, в котором в основном речь идет о pre C90 C. Это связано с тем, что большинство компиляторов C90 не поддерживают //
, и поэтому вы получите сообщение об ошибке. Если вы используете C99, это неверно.
Ожидаются вопросы
Почему не было //
в C до C99, а затем почему оно было введено в C++? Есть ли конкретная причина?
C
произошло от B
. B
произошло от BCPL
. //
были созданы во время BCPL
, поэтому BCPl
использовал их. Его преемник B
начал использовать /*...*/
, которые были унаследованы C
. Хотя, C++
решил воскресить комментарии BCPL
и, конечно же, использовал /*...*/
. В то время стандарт C рассматривал //
как нестандартную функцию.
Когда C99 C был представлен, он имел комментарии //
.
Как называются комментарии //
и /*...*/
?
Комментарии //
называются однострочными комментариями, поскольку они могут занимать только одну строку.
Комментарии /*...*/
называются многострочными комментариями, поскольку они могут занимать несколько строк.
Обязательно ли использовать только один вид комментариев в исходном коде?
Нет, можно использовать любой и даже оба. Хотя некоторые говорят, что использование только одного типа делает код читабельным. Это больше вопрос мнения.
Правило 2.2 MISRA C 2004 устарело?
Что-то вроде. Недавно была выпущена MISRA 2012 с этими изменениями. Хотя, если вы думаете, что MISRA C 2004 неверна, так как концентрируется только на пред-C99, то это не так. Я бы рекомендовал использовать MISRA 2012 в настоящее время.
person
Ashish Ahuja
schedule
01.03.2016