Комментарии
Комментарии служат в качестве документации внутри кода. Когда их добавляют в программу, они игнорируются компилятором; они предназначены исключительно для использования в качестве заметок людьми, которые читают исходный код.
Синтаксис
/* комментарий */
|
(1) | ||||||||
// комментарий
|
(2) | (начиная с C99) | |||||||
Все комментарии удаляются из программы на 3-м этапе трансляции путем замены каждого комментария на один пробельный символ.
Стиль C
Комментарии в стиле C обычно используются для комментирования больших блоков текста или небольших фрагментов кода; однако их можно использовать для комментирования отдельных строк. Чтобы вставить текст комментария в стиле C, просто окружите текст символами /* и */. Комментарии в стиле C говорят компилятору игнорировать все содержимое между /* и */. Хотя это не является частью стандарта C, /** и **/ часто используются для обозначения блоков документации; это допустимо, потому что вторая звездочка просто рассматривается как часть комментария.
За исключением символьной константы, строкового литерала или комментария, символы /* вводят комментарий. Содержимое такого комментария проверяется только для идентификации многобайтовых символов и поиска символов */, завершающих комментарий. Комментарии в стиле C не могут быть вложенными.
Стиль C++Комментарии в стиле C++ обычно используются для комментирования отдельных строк текста или кода; однако их можно поместить вместе, чтобы сформировать многострочные комментарии. Чтобы вставить текст комментария в стиле C++, просто поставьте перед текстом За исключением символьной константы, строкового литерала или комментария, символы // y = f(x); // вызвать алгоритм
Комментарий в стиле C может появиться внутри комментария в стиле C++: // y = f(x); /* вызвать алгоритм */
Комментарий в стиле C++ может появляться внутри комментария в стиле C; это механизм исключения небольшого блока исходного кода: /*
y = f(x); // вызвать алгоритмы
z = g(x);
*/
|
(начиная с C99) |
Примечание
Поскольку комментарии удаляются до этапа препроцессора, макрос нельзя использовать для формирования комментария, а незавершенный комментарий в стиле C не переходит из #include файла.
/* Попытка использовать макрос для формирования комментария. */
/* Но пробел заменяет символы '//'. */
#ifndef DEBUG
#define PRINTF //
#else
#define PRINTF printf
#endif
...
PRINTF("Ошибка в файле %s в строке %i\n", __FILE__, __LINE__);
Помимо комментирования, существуют другие механизмы, используемые для исключения исходного кода:
#if 0
puts("это не будет скомпилировано");
/* нет конфликта с комментариями в стиле C */
// нет конфликта с комментариями в стиле C++
#endif
и
if(0) {
puts("это будет скомпилировано, но не выполнено");
/* нет конфликта с комментариями в стиле C */
// нет конфликта с комментариями в стиле C++
}
Введение // комментариев в C99 было критическим изменением в некоторых редких случаях:
a = b //*деление:*/ c
+ d; /* C89 скомпилирует a = b / c + d;
C99 скомпилирует a = b + d; */
Пример
#include <stdio.h>
/*
Комментарии в стиле C могут содержать
несколько строк.
*/
/* Или только одну строку. */
// Комментарии в стиле C++ могут комментировать одну строку.
// Или они могут
// быть связанными друг с другом.
int main(void)
{
// Приведенный ниже код не будет запущен
// puts("Привет");
// Приведенный ниже код будет запущен
puts("Мир");
// Примечание относительно обратной косой черты + новой строки.
// Несмотря на принадлежность ко 2-у этапу трансляции (по сравнению с 3-м этапом для комментариев),
// '\' по-прежнему определяет, какая часть исходного кода рассматривается
// как 'комментарий':
// Этот комментарий будет перенесен на следующую строку \
puts("Не будет запущен"); // может выдать предупреждение "многострочный комментарий"
puts("Привет, еще раз");
}
Вывод:
Мир
Привет, еще раз
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
- 6.4.9 Comments (стр. 54)
- Стандарт C11 (ISO/IEC 9899:2011):
- 6.4.9 Comments (стр. 75)
- Стандарт C99 (ISO/IEC 9899:1999):
- 6.4.9 Comments (стр. 66)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 3.1.9 Comments
См. также
Документация C++ по Комментарии
|