Spec-Zone.ru › C

Комментарии

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

Синтаксис

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

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

Комментарии в стиле C

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

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

Комментарии в стиле C++

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

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

//  y = f(x);   // invoke algorithm

Комментарий в стиле C может появиться внутри комментария в стиле C++:

//  y = f(x);   /* invoke algorithm */

Комментарий в стиле C++ может появиться внутри комментария в стиле C; это механизм исключения небольшого блока исходного кода:

/*
    y = f(x);   // invoke algorithms
    z = g(x);
*/
(с C99)

Примечания

Поскольку комментарии удаляются до стадии предварительной обработки, макрос не может быть использован для создания комментария, а незавершенный комментарий в стиле C не распространяется из файла, включенного с помощью #include.

/* An attempt to use a macro to form a comment. */
/* But, a space replaces characters "//".       */
#ifndef DEBUG
    #define PRINTF //
#else
    #define PRINTF printf
#endif
...  
PRINTF("Error in file %s at line %i\n", __FILE__, __LINE__);

Помимо комментирования, другие механизмы, используемые для исключения исходного кода, это:

#if 0
    puts("this will not be compiled");
    /* no conflict with C-style comments */
    // no conflict with C++-style comments
#endif

и

if(0) {
    puts("this will be compiled but not be executed");
    /* no conflict with C-style comments */
    // no conflict with C++-style comments
}

Введение // комментариев в C99 стало изменением, нарушающим работу в некоторых редких случаях:

a = b //*divisor:*/ c
+ d; /* C89 compiles a = b / c + d;
        C99 compiles 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++ по Комментарии

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/comment

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API