Comments serve as a sort of in-code documentation. When inserted into a program, they are effectively ignored by the compiler; they are solely intended to be used as notes by the humans that read source code.
Contents
[edit] Syntax
/* comment */ | (1) | |
// comment | (2) | (since C99) |
1) Often known as «C-style» or «multi-line» comments.
2) Often known as «C++-style» or «single-line» comments.
All comments are removed from the program at translation phase 3 by replacing each comment with a single whitespace character.
[edit] C-style
C-style comments are usually used to comment large blocks of text or small fragments of code; however, they can be used to comment single lines. To insert text as a C-style comment, simply surround the text with /* and */ . C-style comments tell the compiler to ignore all content between /* and */ . Although it is not part of the C standard, /** and **/ are often used to indicate documentation blocks; this is legal because the second asterisk is simply treated as part of the comment.
Разбор «Hello, World!» на Си
Except within a character constant, a string literal, or a comment, the characters /* introduce a comment. The contents of such a comment are examined only to identify multibyte characters and to find the characters */ that terminate the comment. C-style comments cannot be nested.
C++-style
C++-style comments are usually used to comment single lines of text or code; however, they can be placed together to form multi-line comments. To insert text as a C++-style comment, simply precede the text with // and follow the text with the new line character. C++-style comments tell the compiler to ignore all content between // and a new line.
Except within a character constant, a string literal, or a comment, the characters // introduce a comment that includes all multibyte characters up to, but not including, the next new-line character. The contents of such a comment are examined only to identify multibyte characters and to find the new-line character that terminates the comment. C++-style comments can be nested:
// y = f(x); // invoke algorithm
A C-style comment may appear within a C++-style comment:
// y = f(x); /* invoke algorithm */
A C++-style comment may appear within a C-style comment; this is a mechanism for excluding a small block of source code:
/* y = f(x); // invoke algorithms z = g(x); */
[edit] Notes
Because comments are removed before the preprocessor stage, a macro cannot be used to form a comment and an unterminated C-style comment doesn’t spill over from an #include’d file.
/* 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 %in», __FILE__, __LINE__);
Besides commenting out, other mechanisms used for source code exclusion are:
Урок №3 по C#: Комментирование кода
#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 }
The introduction of // comments in C99 was a breaking change in some rare circumstances:
a = b //*divisor:*/ c + d; /* C89 compiles a = b / c + d; C99 compiles a = b + d; */
[edit] Example
Run this code
#include /* 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
[edit] References
- C17 standard (ISO/IEC 9899:2018):
- 6.4.9 Comments (p: 54)
- C11 standard (ISO/IEC 9899:2011):
- 6.4.9 Comments (p: 75)
- C99 standard (ISO/IEC 9899:1999):
- 6.4.9 Comments (p: 66)
- C89/C90 standard (ISO/IEC 9899:1990):
- 3.1.9 Comments
Источник: en.cppreference.com
Комментарии в C
Комментарий — это последовательность символов, которая начинается с косой черты и звездочки (/*). Компилятор воспринимает комментарий как один пробельный символ, в остальных случаях он игнорируется. Комментарии могут включать любое сочетание символов из представимого набора символов, который включает символы новой строки, но не включает разделитель конца комментария (*/). Комментарии могут занимать несколько строк, но не могут быть вложенными.
Они могут располагаться в любом месте, где допускается использование пробельных символов. Так как компилятор обрабатывает комментарий как один символ пробела, вы не можете включать комментарии в токены. Символы, которые находятся в комментарии, компилятор игнорирует.
Комментарии используются для документирования кода. В следующем примере компилятор принимает комментарий:
/* Comments can contain keywords such as for and while without generating errors. */
Комментарии в коде могут находиться в той же строке, что и оператор:
printf( «Hellon» ); /* Comments can go here */
Перед функциями или программными модулями можно вставлять блоки комментариев с описаниями.
/* MATHERR.C illustrates writing an error routine * for math functions. */
Так как комментарии не могут содержать вложенные комментарии, в этом примере возникает ошибка:
/* Comment out this routine for testing /* Open file */ fh = _open( «myfile.c», _O_RDONLY ); . . . */
Причина ошибки в том, что компилятор распознает первое сочетание символов, */ , расположенное после слов Open file , как конец комментария. Он пытается обработать оставшийся текст, а обнаружив символы */ за пределами комментария, выдает сообщение об ошибке.
Хотя с помощью комментариев можно скрывать часть кода для тестирования, для этого есть полезная альтернатива: директивы препроцессора #if и #endif и условная компиляция. Дополнительные сведения см. в статье Preprocessor Directives (Директивы препроцессора) в справочника по препроцессору.
Блок, относящийся только к системам Microsoft
Компилятор Microsoft также поддерживает однострочные комментарии, перед которыми ставятся две косые черты ( // ). Эти примечания не могут быть расширены до второй строки.
// This is a valid comment
Комментарии, начинающиеся с двух косых черт ( // ), заканчиваются следующим символом новой строки, которому не предшествует escape-символ. В следующем примере символу новой строки предшествует обратная косая черта ( ), создается escape-последовательность. Эта escape-последовательность заставляет компилятор обрабатывать следующую строку как часть предыдущей строки. Дополнительные сведения см. в статье Escape Sequences (Escape-последовательности).
// my comment i++;
Поэтому оператор i++; скрыт комментарием.
В Microsoft C расширения Microsoft по умолчанию включены. Отключить их можно при помощи параметра /Za.
Завершение блока, относящегося только к системам Майкрософт
Источник: learn.microsoft.com
C Урок 3. Комментарии
Порой не всегда инструкции, команды, а также директивы позволяют при чтении исходного кода быстро понять, что же вообще происходит в коде, за что отвечает тот или иной участок кода, что он вообще делает.
И тут нам на помощь приходят комментарии. Они позволяют нам в любом месте исходного кода нашей программы писать какие-либо подсказки о нашем коде для того, чтобы мы в будущем, когда код достигнет внушительных размеров, могли понять для чего мы это писали и что в данном месте вообще делается.
Также комментарии помогают нам участок кода, который мы не хотим, чтобы выполнялся программой, но, возможно, в дальнейшем он нам пригодится, спрятать от компилятора, но пока не удалять. Мы данный участок кода превращаем в комментарий и он, хоть и не будет удалён из файла с исходным кодом, выполняться не будет.
Вот зачем нам нужны комментарии.
Теперь, собственно, давайте разберёмся, как их вообще писать в коде и как заставить компилятор их не выполнять.
Если мы хотим написать комментарий в одной строке (либо в конце строки), то мы используем для этого знак « // » (двойная косая черта, кавычки не входят). Данный знак мы ставим перед текстом с комментарием. То есть, всё то, что в данной строке находится после данного знака, будет считаться комментарием и интерпретироваться компилятором не будет, следовательно и выполняться затем тоже.
Конечно же мы можем наши комментарии написать и в несколько строк, используя тот же знак двух косых чёрточек, только мы будем вынуждены данный знак ставить вначале каждой из этих строк. Хорошо, когда таких строк немного, а вот если их, например, 50, или даже 100, то для этого есть другой способ.
Если мы хотим написать комментарий из нескольких строк либо «закомментировать», чтобы впоследствии не выполнять какой-то участок кода, то мы используем два символа: « /* » и « */ «. Первый из этих символов (косая черта и звёздочка) используется вначале комментария, а вторая (звёздочка и косая черта) — в его конце. Мы также можем такие символы использовать и в одной строке, например, если мы хотим закомментировать её участок где-то в начале или в середине.
Есть ещё один способ добавлять комментарий. Он также очень интересен и не всегда документирован, так как он никак не подсвечивается с помощью подсветки синтаксиса (комментарии, добавленные с помощью предыдущих двух способов как правило подсвечиваются зелёным цветом), да и, по большому счёту он и комментарием-то не является, но работает так же как и обычные комментарии.
Данный способ применяется в случае также комментирования нескольких строк. Перед первой комментируемой строкой мы пишем строку с директивой « #if 0 «. Это условная директива, с такими директивами препроцессора мы будем знакомиться позже, поэтому я лишь скажу, что это условие, в тело которого мы никогда не попадём, так как оно никогда не может быть истинным. Поэтому после этой директивы дальнейший код не будет выполняться. А после последней строки, которую мы хотим комментировать, мы пишем строку с директивой « #endif «, которая будет означать окончание нашего условия. Поэтому весь тот код, который будет расположен между данными директивами, выполняться никогда не будет и, следовательно, также будет являться комментарием.
Когда именно нам может пригодиться третий способ и почему нельзя использовать второй? А потому, что порой ,причем зачастую, случаются такие ситуации, когда уже присутствуют многострочные комментарии в участке кода, который мы хотим закомментировать, То второй способ уже не сработает. Мало того, он закончится ошибкой использования некорректных символов. В этом случае нам на помощь и придёт третий способ.
Но а чтобы нам не путаться , что, где и как используется и как это работает, предлагаю всё это проделать на практике. Для этого мы создадим новую папку с именем, например, MYPROG03 и скопируем в неё содержимое нашего прежнего проекта (файл main.c и два cmd-файла). В файле build.cmd myprog02 заменим на myprog03 вот здесь
Откроем файл main.c и напишем наш первый комментарий вначале тела функции main(), тем самым обеспечив себе в будущем напоминание о том, что у нас здесь делается (да и не только себе, вдруг мы захотим поделиться своим творением с кем-то, он тем более может не понять нашего кода, не он же его писал)
Источник: narodstream.ru