Suche…


Einführung

Kommentare werden verwendet, um der lesenden Person etwas mitzuteilen. Kommentare werden vom Compiler wie ein Leerzeichen behandelt und ändern nichts an der tatsächlichen Bedeutung des Codes. Es gibt zwei Syntaxen für Kommentare in C, das Original /* */ und das etwas neuere // . Einige Dokumentationssysteme verwenden speziell formatierte Kommentare, um die Dokumentation für Code zu erstellen.

Syntax

  • /*...*/
  • //... (nur C99 und höher)

/ * * / abgegrenzte Kommentare

Ein Kommentar beginnt mit einem Schrägstrich gefolgt von einem Sternchen ( /* ) und endet, sobald ein Sternchen gefolgt von einem Schrägstrich ( */ ) erscheint. Alles, was sich zwischen diesen Zeichenkombinationen befindet, ist ein Kommentar und wird vom Compiler als Leerzeichen behandelt (grundsätzlich ignoriert).

/* this is a comment */

Der Kommentar oben ist ein einzeiliger Kommentar. Kommentare dieses /* -Typs können sich über mehrere Zeilen erstrecken:

/* this is a
multi-line
comment */

Obwohl es nicht unbedingt erforderlich ist, besteht eine übliche Stilkonvention mit mehrzeiligen Kommentaren darin, führende Zeilen und Sternchen in die Zeilen nach der ersten Zeile und die Zeichen /* und */ in neue Zeilen einzufügen, sodass sie alle in einer Reihe angeordnet sind:

/* 
 * this is a
 * multi-line
 * comment
 */

Die zusätzlichen Sternchen haben keine funktionellen Auswirkungen auf den Kommentar, da keines der Zeichen einen entsprechenden Schrägstrich hat.

Diese /* Art der Kommentare können auf ihre eigene Linie verwendet werden, am Ende einer Codezeile oder sogar innerhalb von Codezeilen:

/* 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 */
    }
}

Kommentare können nicht verschachtelt werden. Dies liegt daran, dass nachfolgende /* (als Teil des Kommentars) ignoriert werden und das erste */ erreichtes Ende des Kommentars behandelt wird. Der Kommentar im folgenden Beispiel wird nicht funktionieren :

/* outer comment, means this is ignored => /* attempted inner comment */ <= ends the comment, not this one => */

Informationen zum Kommentieren von Codeblöcken, die Kommentare dieses Typs enthalten, die andernfalls verschachtelt wären, finden Sie im Kommentarbeispiel unter Verwendung des Präprozessors

// abgegrenzte Kommentare

C99

Mit C99 wurden einzeilige Kommentare im C ++ - Stil eingeführt. Diese Art von Kommentar beginnt mit zwei Schrägstrichen und geht bis zum Zeilenende:

// this is a comment

Diese Art von Kommentar erlaubt keine mehrzeiligen Kommentare. Es ist jedoch möglich, einen Kommentarblock durch Hinzufügen mehrerer einzeiliger Kommentare nacheinander zu erstellen:

// each of these lines are a single-line comment
// note how each must start with
// the double forward-slash

Diese Art von Kommentar kann in einer eigenen Zeile oder am Ende einer Codezeile verwendet werden. Da sie jedoch bis zum Ende der Zeile laufen, dürfen sie nicht in einer Codezeile verwendet werden

// 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
}

Kommentieren mit dem Präprozessor

Große Teile des Codes kann auch sein „ kommentierte out“ mit den Präprozessordirektiven #if 0 und #endif . Dies ist nützlich, wenn der Code mehrzeilige Kommentare enthält, die sonst nicht verschachtelt würden.

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

Möglicher Fallstrick durch Trigraphen

C99

Beim Schreiben // Kommentare ist es möglich, einen Tippfehler zu machen, der die erwartete Operation beeinflusst. Wenn man schreibt:

int x = 20;  // Why did I do this??/

Das / am Ende war ein Tippfehler, wird nun aber in \ interpretiert. Dies liegt daran, dass das ??/ ein Trigraph bildet.

Das ??/ Trigraph ist eigentlich eine lange Schreibweise für \ , das das Linienfortsetzungssymbol ist. Dies bedeutet, dass der Compiler der Meinung ist, dass die nächste Zeile eine Fortsetzung der aktuellen Zeile ist, d. H. Eine Fortsetzung des Kommentars, der möglicherweise nicht wie beabsichtigt ist.

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow