close
Пространства имён
Варианты
Действия

Комментарии

Материал из cppreference.com
< c

Комментарии служат в качестве документации внутри кода. Когда их добавляют в программу, они игнорируются компилятором; они предназначены исключительно для использования в качестве заметок людьми, которые читают исходный код.

Синтаксис

/* комментарий */ (1)
// комментарий (2) (начиная с C99)
1) Часто называется как "стиль C" или "многострочный" комментарий.
2) Часто называется как "стиль C++" или "однострочный" комментарий.

Все комментарии удаляются из программы на 3-м этапе трансляции путем замены каждого комментария на один пробельный символ.

Стиль C

Комментарии в стиле C обычно используются для комментирования больших блоков текста или небольших фрагментов кода; однако их можно использовать для комментирования отдельных строк. Чтобы вставить текст комментария в стиле 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++ по Комментарии