Sök…


Introduktion

Kommentarer används för att indikera något för den som läser koden. Kommentarer behandlas som ett tomt av kompilatorn och ändrar inte något i kodens faktiska betydelse. Det finns två syntaxer som används för kommentarer i C, originalen /* */ och den något nyare // . Vissa dokumentationssystem använder speciellt formaterade kommentarer för att producera dokumentationen för kod.

Syntax

  • /*...*/
  • //... (endast C99 och senare)

/ * * / avgränsade kommentarer

En kommentar börjar med en framåt snedstreck följt omedelbart av en asterisk ( /* ) och slutar så snart en asterisk omedelbart följt av en framåt snedstreck ( */ ) stöter på. Allt mellan dessa karaktärkombinationer är en kommentar och behandlas som en tom (i princip ignorerad) av kompilatorn.

/* this is a comment */

Kommentaren ovan är en enda radkommentar. Kommentarer av denna /* -typ kan sträcka sig över flera rader, så:

/* this is a
multi-line
comment */

Även om det inte är strikt nödvändigt, är en vanlig stilkonvention med kommentarer med flera linjer att sätta ledande utrymmen och asterisker på linjerna efter den första och /* och */ på nya linjer, så att de alla ställer upp:

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

De extra asteriskerna har ingen funktionell effekt på kommentaren, eftersom ingen av dem har en relaterad snedstreck.

Dessa /* typ av kommentarer kan användas på sin egen rad, i slutet av en kodrad eller till och med inom kodrader:

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

Kommentarer kan inte läggas in. Detta beror på att varje efterföljande /* kommer att ignoreras (som en del av kommentaren) och den första */ nås kommer att behandlas som avslutande av kommentaren. Kommentaren i följande exempel fungerar inte :

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

För att kommentera kodblock som innehåller kommentarer av den här typen, som annars skulle kapslas, se Kommentaren med förprocessorns exempel nedan

// avgränsade kommentarer

C99

C99 introducerade användningen av C ++ - kommentarer på en rad. Den här typen av kommentarer börjar med två snedstreck och går till slutet av en rad:

// this is a comment

Den här typen av kommentarer tillåter inte kommentarer med flera linjer, men det är möjligt att göra ett kommentarblock genom att lägga till flera kommentarer på en rad efter varandra:

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

Denna typ av kommentarer kan användas på sin egen rad eller i slutet av en kodrad. Eftersom de går till slutet av raden kan de emellertid inte användas inom en kodrad

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

Kommentera med hjälp av förprocessorn

Stora kodbitar kan också "kommenteras" med förbehandlingsdirektivet #if 0 och #endif . Detta är användbart när koden innehåller kommentarer på flera linjer som annars inte skulle bygga bo.

#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öjlig fallgrop på grund av trigrafer

C99

När du skriver // avgränsade kommentarer är det möjligt att göra ett typografiskt fel som påverkar deras förväntade funktion. Om man skriver:

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

Slutet / i slutet var en skrivfel men kommer nu att tolkas till \ . Detta beror på att ??/ bildar en trigraf .

??/ trigrafen är faktiskt en longhand notation för \ , som är linjen fortsättningssymbolen. Detta innebär att kompilatorn tror att nästa rad är en fortsättning på den aktuella linjen, det vill säga en fortsättning av kommentaren, vilket kanske inte är vad som är avsett.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow