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;