Namespaces
Variants

Comments

From cppreference.net
< c

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

Содержание

Синтаксис

/* комментарий */ (1)
// комментарий (2) (since C99)
1) Часто называются "C-style" или "многострочными" комментариями.
2) Часто известны как "C++-style" или "single-line" комментарии.

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

C-стиль

C-style комментарии обычно используются для комментирования больших блоков текста или небольших фрагментов кода; однако их можно использовать и для комментирования отдельных строк. Чтобы вставить текст как C-style комментарий, просто окружите текст /* и */ . C-style комментарии указывают компилятору игнорировать всё содержимое между /* и */ . Хотя это не является частью стандарта C, /** и **/ часто используются для обозначения блоков документации; это допустимо, поскольку вторая звёздочка просто рассматривается как часть комментария.

За исключением случаев внутри символьной константы , строкового литерала или комментария, символы /* начинают комментарий. Содержимое такого комментария анализируется только для идентификации многобайтовых символов и поиска символов */ , которые завершают комментарий. C-стиль комментариев не может быть вложенным.

C++-style

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