Comments
Комментарии служат своего рода встроенной документацией в коде. При добавлении в программу они фактически игнорируются компилятором; они предназначены исключительно для использования в качестве заметок людьми, читающими исходный код.
Содержание |
Синтаксис
/*
комментарий
*/
|
(1) | ||||||||
//
комментарий
|
(2) | (since C99) | |||||||
Все комментарии удаляются из программы на фазе трансляции 3 путём замены каждого комментария одним пробельным символом.
C-стиль
C-style комментарии обычно используются для комментирования больших блоков текста или небольших фрагментов кода; однако их можно использовать и для комментирования отдельных строк. Чтобы вставить текст как C-style комментарий, просто окружите текст
/*
и
*/
. C-style комментарии указывают компилятору игнорировать всё содержимое между
/*
и
*/
. Хотя это не является частью стандарта C,
/**
и
**/
часто используются для обозначения блоков документации; это допустимо, поскольку вторая звёздочка просто рассматривается как часть комментария.
За исключением случаев внутри
символьной константы
,
строкового литерала
или комментария, символы
/*
начинают комментарий. Содержимое такого комментария анализируется только для идентификации многобайтовых символов и поиска символов
*/
, которые завершают комментарий. C-стиль комментариев не может быть вложенным.
C++-style
C++-style комментарии обычно используются для комментирования отдельных строк текста или кода; однако они могут быть размещены вместе для формирования многострочных комментариев. Чтобы вставить текст как C++-style комментарий, просто предварите текст
За исключением случаев внутри
символьной константы
,
строкового литерала
или комментария, символы
// y = f(x); // invoke algorithm
C-style комментарий может появляться внутри C++-style комментария: // y = f(x); /* invoke algorithm */
C++-style комментарий может появляться внутри C-style комментария; это механизм для исключения небольшого блока исходного кода: /*
y = f(x); // invoke algorithms
z = g(x);
*/
|
(начиная с C99) |
Примечания
Поскольку комментарии удаляются до этапа препроцессора, макрос не может быть использован для создания комментария, а незавершённый C-стиль комментария не переходит из подключаемого файла #include.
/* Попытка использовать макрос для формирования комментария. */ /* Однако, пробел заменяет символы "//". */ #ifndef DEBUG #define PRINTF // #else #define PRINTF printf #endif ... PRINTF("Error in file %s at line %i\n", __FILE__, __LINE__);
Помимо комментирования, другие механизмы, используемые для исключения исходного кода:
#if 0 puts("это не будет скомпилировано"); /* no conflict with C-style comments */ // no conflict with C++-style comments #endif
и
if(0) { puts("этот код будет скомпилирован, но не выполнен"); /* no conflict with C-style comments */ // no conflict with C++-style comments }
Введение комментариев // в C99 стало критическим изменением в некоторых редких случаях:
a = b //*divisor:*/ c + d; /* C89 компилирует a = b / c + d; C99 компилирует a = b + d; */
Пример
#include <stdio.h> /* C-style comments can contain multiple lines. */ /* Or, just one line. */ // C++-style comments can comment one line. // Or, they can // be strung together. int main(void) { // The below code won't be run // puts("Hello"); // The below code will be run puts("World"); // A note regarding backslash + newline. // Despite belonging to translation phase 2 (vs phase 3 for comments), // '\' still determines which portion of the source code is considered // as 'comments': // This comment will be promoted to the next line \ puts("Won't be run"); // may issue a warning "multi-line comment" puts("Hello, again"); }
Вывод:
World Hello, again
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 6.4.9 Комментарии (стр: 54)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 6.4.9 Комментарии (стр: 75)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 6.4.9 Комментарии (стр: 66)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 3.1.9 Комментарии
Смотрите также
|
C++ документация
для
Комментарии
|