Namespaces
Variants

Comments

From cppreference.net
< c

Kommentare dienen als eine Art von In-Code-Dokumentation. Wenn sie in ein Programm eingefügt werden, werden sie vom Compiler effektiv ignoriert; sie sind ausschließlich als Notizen für die Menschen gedacht, die den Quellcode lesen.

Inhaltsverzeichnis

Syntax

/* Kommentar */ (1)
// Kommentar (2) (seit C99)
1) Oft als "C-Stil" oder "mehrzeilige" Kommentare bekannt.
2) Oft als "C++-Stil"- oder "Einzeilen"-Kommentare bekannt.

Alle Kommentare werden aus dem Programm in der Übersetzungsphase 3 entfernt, indem jeder Kommentar durch ein einzelnes Leerzeichen ersetzt wird.

C-Stil

C-style Kommentare werden normalerweise verwendet, um große Textblöcke oder kleine Codefragmente zu kommentieren; sie können jedoch auch zum Kommentieren einzelner Zeilen verwendet werden. Um Text als C-style Kommentar einzufügen, umgeben Sie den Text einfach mit /* und */ . C-style Kommentare weisen den Compiler an, alle Inhalte zwischen /* und */ zu ignorieren. Obwohl es nicht Teil des C-Standards ist, werden /** und **/ oft verwendet, um Dokumentationsblöcke zu kennzeichnen; dies ist zulässig, da der zweite Stern einfach als Teil des Kommentars behandelt wird.

Außerhalb einer Zeichenkonstante , eines String-Literals oder eines Kommentars leiten die Zeichen /* einen Kommentar ein. Der Inhalt eines solchen Kommentars wird nur untersucht, um Multibyte-Zeichen zu identifizieren und die Zeichen */ zu finden, die den Kommentar beenden. C-Stil-Kommentare können nicht geschachtelt werden.

C++-Stil

C++-Stil Kommentare werden normalerweise verwendet, um einzelne Text- oder Codezeilen zu kommentieren; sie können jedoch zusammengefügt werden, um mehrzeilige Kommentare zu bilden. Um Text als C++-Stil Kommentar einzufügen, stellen Sie dem Text einfach // voran und folgen dem Text mit dem Zeilenumbruchzeichen. C++-Stil Kommentare weisen den Compiler an, alle Inhalte zwischen // und einem Zeilenumbruch zu ignorieren.

Außerhalb einer Zeichenkonstante , eines Zeichenkettenliterals oder eines Kommentars führen die Zeichen // einen Kommentar ein, der alle Mehrbytezeichen bis zum nächsten Zeilenumbruchzeichen, jedoch ohne dieses, enthält. Der Inhalt eines solchen Kommentars wird nur untersucht, um Mehrbytezeichen zu identifizieren und das den Kommentar beendende Zeilenumbruchzeichen zu finden. C++-Stil Kommentare können geschachtelt werden:

//  y = f(x);   // invoke algorithm

Ein C-Stil Kommentar kann innerhalb eines C++-Stil Kommentars erscheinen:

//  y = f(x);   /* invoke algorithm */

Ein C++-Stil Kommentar kann innerhalb eines C-Stil Kommentars erscheinen; dies ist ein Mechanismus zum Ausschließen eines kleinen Quellcodeblocks:

/*
    y = f(x);   // invoke algorithms
    z = g(x);
*/
(seit C99)

Hinweise

Da Kommentare entfernt werden bevor die Präprozessor-Stufe beginnt, kann ein Makro nicht zur Bildung eines Kommentars verwendet werden und ein nicht abgeschlossener C-Stil-Kommentar greift nicht aus einer #include-Datei über.

/* Ein Versuch, ein Makro zur Bildung eines Kommentars zu verwenden. */
/* Aber ein Leerzeichen ersetzt die Zeichen "//".                   */
#ifndef DEBUG
    #define PRINTF //
#else
    #define PRINTF printf
#endif
...  
PRINTF("Error in file %s at line %i\n", __FILE__, __LINE__);

Neben dem Auskommentieren werden andere Mechanismen zur Quellcode-Ausschließung verwendet:

#if 0
    puts("dies wird nicht kompiliert");
    /* no conflict with C-style comments */
    // no conflict with C++-style comments
#endif

und

if(0) {
    puts("dies wird kompiliert, aber nicht ausgeführt");
    /* no conflict with C-style comments */
    // no conflict with C++-style comments
}

Die Einführung von // Kommentaren in C99 war in einigen seltenen Fällen eine breaking change:

a = b //*Divisor:*/ c
+ d; /* C89 kompiliert a = b / c + d;
        C99 kompiliert a = b + d; */

Beispiel

#include <stdio.h>
/*
C-style comments can contain
multiple lines.
*/
/* Or, just one line. */
// C++-style comments can comment one line.
// Or, they can
// be strung together.
int main(void)
{
  // The below code won't be run
  // puts("Hello");
  // The below code will be run
  puts("World");
  // A note regarding backslash + newline.
  // Despite belonging to translation phase 2 (vs phase 3 for comments),
  // '\' still determines which portion of the source code is considered
  // as 'comments':
  // This comment will be promoted to the next line \
  puts("Won't be run"); // may issue a warning "multi-line comment"
  puts("Hello, again");
}

Ausgabe:

World
Hello, again

Referenzen

  • C17-Standard (ISO/IEC 9899:2018):
  • 6.4.9 Kommentare (S. 54)
  • C11-Standard (ISO/IEC 9899:2011):
  • 6.4.9 Kommentare (S. 75)
  • C99-Standard (ISO/IEC 9899:1999):
  • 6.4.9 Kommentare (S. 66)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 3.1.9 Kommentare

Siehe auch

C++-Dokumentation für Kommentare