Поиск…


Вступление

Комментарии используются, чтобы указать что-то человеку, читающему код. Комментарии обрабатываются как пустые компилятором и ничего не меняют в фактическом значении кода. Есть два синтаксиса, используемые для комментариев в 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

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) */
... 

Возможная ловушка из-за триграфов

C99

При написании // разделительных комментариев можно сделать типографскую ошибку, которая влияет на их ожидаемую работу. Если один тип:

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;


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow