C Language
Комментарии
Поиск…
Вступление
Комментарии используются, чтобы указать что-то человеку, читающему код. Комментарии обрабатываются как пустые компилятором и ничего не меняют в фактическом значении кода. Есть два синтаксиса, используемые для комментариев в C, оригинал /* */
и немного более новый //
. Некоторые системы документации используют специально отформатированные комментарии, чтобы помочь создать документацию для кода.
Синтаксис
-
/*...*/
-
//...
(только с C99 и позже)
/ * * / разделили комментарии
Комментарий начинается с прямой косой черты, за которой сразу следует звездочка ( /*
), и заканчивается, как только появляется звездочка, сразу же за которой следует косая черта ( */
). Все, что находится между этими комбинациями символов, является комментарием и рассматривается как пустой (в основном игнорируемый) компилятором.
/* this is a comment */
Комментарий выше - комментарий в одной строке. Комментарии этого /*
типа могут охватывать несколько строк, например:
/* this is a
multi-line
comment */
Хотя это не является строго необходимым, соглашение об общем стиле с многострочными комментариями заключается в том, чтобы помещать ведущие пробелы и звездочки в строки после первого и /*
и */
на новые строки, чтобы все они выстроились в очередь:
/*
* this is a
* multi-line
* comment
*/
Дополнительные звездочки не имеют никакого функционального влияния на комментарий, так как ни один из них не имеет связанной косой черты.
Эти /*
типы комментариев могут использоваться в их собственной строке, в конце строки кода или даже в строках кода:
/* this comment is on its own line */
if (x && y) { /*this comment is at the end of a line */
if ((complexCondition1) /* this comment is within a line of code */
&& (complexCondition2)) {
/* this comment is within an if, on its own line */
}
}
Комментарии не могут быть вложенными. Это связано с тем, что любой последующий /*
будет проигнорирован (как часть комментария), а первый */
достиг будет рассматриваться как окончание комментария. Комментарий в следующем примере не будет работать :
/* outer comment, means this is ignored => /* attempted inner comment */ <= ends the comment, not this one => */
Чтобы прокомментировать блоки кода, содержащие комментарии этого типа, которые в противном случае были бы вложенными, см. Комментарий, используя пример препроцессора ниже
// Ограниченные комментарии
C99 представил использование однострочных комментариев в стиле C ++. Этот тип комментариев начинается с двух косых черт и проходит до конца строки:
// this is a comment
Этот комментарий не позволяет многострочные комментарии, хотя можно сделать блок комментариев, добавив несколько комментариев одной строки один за другим:
// each of these lines are a single-line comment
// note how each must start with
// the double forward-slash
Этот тип комментариев может использоваться в отдельной строке или в конце строки кода. Однако, поскольку они работают до конца строки , они не могут использоваться в пределах строки кода
// this comment is on its own line
if (x && y) { // this comment is at the end of a line
// this comment is within an if, on its own line
}
Комментирование с использованием препроцессора
Большие куски кода также можно «прокомментировать», используя директивы препроцессора #if 0
и #endif
. Это полезно, когда код содержит многострочные комментарии, которые в противном случае не будут вложены.
#if 0 /* Starts the "comment", anything from here on is removed by preprocessor */
/* A large amount of code with multi-line comments */
int foo()
{
/* lots of code */
...
/* ... some comment describing the if statement ... */
if (someTest) {
/* some more comments */
return 1;
}
return 0;
}
#endif /* 0 */
/* code from here on is "uncommented" (included in compiled executable) */
...
Возможная ловушка из-за триграфов
При написании //
разделительных комментариев можно сделать типографскую ошибку, которая влияет на их ожидаемую работу. Если один тип:
int x = 20; // Why did I do this??/
/
В конце была опечатка, но теперь она будет интерпретирована в \
. Это потому, что ??/
Образует триграф .
??/
триграф на самом деле обыкновенное письмо обозначение \
, который является символом строки продолжения. Это означает, что компилятор считает, что следующая строка является продолжением текущей строки, т. Е. Продолжением комментария, что может и не быть тем, что предназначено.
int foo = 20; // Start at 20 ??/
int bar = 0;
// The following will cause a compilation error (undeclared variable 'bar')
// because 'int bar = 0;' is part of the comment on the preceding line
bar += foo;