C Language                
            Komentarze
        
        
            
    Szukaj…
Wprowadzenie
 Komentarze służą do wskazania czegoś osobie czytającej kod. Komentarze są traktowane przez kompilator jak puste miejsce i nie zmieniają niczego w rzeczywistym znaczeniu kodu. Istnieją dwie składnie używane do komentowania w C, oryginalny /* */ i nieco nowszy // . Niektóre systemy dokumentacji używają specjalnie sformatowanych komentarzy, aby pomóc w tworzeniu dokumentacji dla kodu. 
Składnia
-  /*...*/
-  //...(tylko C99 i nowsze)
/ * * / rozdzielane komentarze
 Komentarz zaczyna się od ukośnika, po którym następuje natychmiast gwiazdka ( /* ), a kończy się, gdy tylko napotka gwiazdkę, po której następuje ukośnik ( */ ). Wszystko pomiędzy tymi kombinacjami znaków jest komentarzem i jest traktowane przez kompilator jako puste (zasadniczo ignorowane). 
/* this is a comment */
 Powyższy komentarz jest komentarzem jednowierszowym. Komentarze tego typu /* mogą obejmować wiele wierszy, na przykład: 
/* this is a
multi-line
comment */
 Chociaż nie jest to absolutnie konieczne, powszechną konwencją stylów z komentarzami wieloliniowymi jest umieszczanie wiodących spacji i gwiazdek w wierszach po pierwszej, a /* i */ w nowych wierszach, tak aby wszystkie były w jednej linii: 
/* 
 * this is a
 * multi-line
 * comment
 */
Dodatkowe gwiazdki nie mają żadnego funkcjonalnego wpływu na komentarz, ponieważ żadna z nich nie ma powiązanego ukośnika do przodu.
 Tego typu /* komentarzy można użyć w osobnym wierszu, na końcu wiersza kodu, a nawet w wierszu kodu: 
/* 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 */
    }
}
 Komentarze nie mogą być zagnieżdżone. Wynika to z tego, że każdy kolejny /* zostanie zignorowany (jako część komentarza), a pierwszy */ osiągnięty zostanie potraktowany jako zakończenie komentarza. Komentarz w poniższym przykładzie nie będzie działać : 
/* outer comment, means this is ignored => /* attempted inner comment */ <= ends the comment, not this one => */
Aby skomentować bloki kodu zawierające komentarze tego typu, które w innym przypadku byłyby zagnieżdżone, zobacz Komentowanie za pomocą przykładu preprocesora poniżej
// rozdzielone komentarze
C99 wprowadził użycie komentarzy jednowierszowych w stylu C ++. Ten typ komentarza zaczyna się od dwóch ukośników i biegnie do końca linii:
// this is a comment
Ten typ komentarza nie pozwala na komentarze wieloliniowe, chociaż możliwe jest utworzenie bloku komentarza poprzez dodanie kilku komentarzy jednowierszowych jeden po drugim:
// each of these lines are a single-line comment
// note how each must start with
// the double forward-slash
Ten typ komentarza może być użyty we własnej linii lub na końcu linii kodu. Jednakże, ponieważ prowadzony do końca linii, nie mogą one być wykorzystane w linii kodu
// 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
}
Komentowanie za pomocą preprocesora
 Duże fragmenty kodu można również „komentować” za pomocą dyrektyw preprocesora #if 0 i #endif . Jest to przydatne, gdy kod zawiera wieloliniowe komentarze, które w innym przypadku nie zagnieżdżałyby się. 
#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) */
... 
Możliwa pułapka z powodu kaligrafii
 Podczas pisania komentarzy z ogranicznikami // możliwe jest popełnienie błędu typograficznego, który wpływa na ich oczekiwane działanie. Jeśli jeden typ: 
int x = 20;  // Why did I do this??/
 / Na końcu była literówka, ale teraz będzie się interpretować w \ . Wynika to z faktu, że ??/ tworzy trygrafię . 
 ??/ trigraph jest w rzeczywistości notacją odręczną dla \ , która jest symbolem kontynuacji linii. Oznacza to, że kompilator uważa, że następny wiersz jest kontynuacją bieżącego wiersza, to znaczy kontynuacją komentarza, co może być niezgodne z przeznaczeniem. 
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;