Ricerca…


introduzione

I commenti sono usati per indicare qualcosa alla persona che legge il codice. I commenti sono trattati come un vuoto dal compilatore e non cambiano nulla nel significato attuale del codice. Esistono due sintassi utilizzate per i commenti in C, l'originale /* */ e il leggermente più nuovo // . Alcuni sistemi di documentazione usano commenti appositamente formattati per aiutare a produrre la documentazione per il codice.

Sintassi

  • /*...*/
  • //... (solo C99 e successivi)

/ * * / commenti delimitati

Un commento inizia con una barra diretta seguita immediatamente da un asterisco ( /* ) e termina non appena si incontra un asterisco immediatamente seguito da una barra ( */ ). Tutto in mezzo a queste combinazioni di caratteri è un commento ed è trattato come un vuoto (sostanzialmente ignorato) dal compilatore.

/* this is a comment */

Il commento sopra è un commento a riga singola. I commenti di questo /* tipo possono estendersi su più righe, in questo modo:

/* this is a
multi-line
comment */

Sebbene non sia strettamente necessario, una convenzione di stile comune con commenti su più righe consiste nel mettere gli spazi iniziali e gli asterischi sulle linee successive alla prima, e /* e */ sulle nuove linee, in modo che vengano allineate tutte:

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

Gli asterischi extra non hanno alcun effetto funzionale sul commento in quanto nessuno di essi ha una barra diretta correlata.

Questi /* tipo di commenti possono essere utilizzati sulla propria riga, alla fine di una riga di codice o anche all'interno di righe di codice:

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

I commenti non possono essere nidificati. Questo perché qualsiasi /* successivo verrà ignorato (come parte del commento) e il primo */ raggiunto sarà trattato come terminando il commento. Il commento nel seguente esempio non funzionerà :

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

Per commentare blocchi di codice che contengono commenti di questo tipo, che verrebbero altrimenti annidati, vedi Commentare usando l' esempio del preprocessore sotto

// commenti delimitati

C99

C99 ha introdotto l'uso di commenti a riga singola in stile C ++. Questo tipo di commento inizia con due barre e scorre fino alla fine di una riga:

// this is a comment

Questo tipo di commento non consente commenti su più righe, sebbene sia possibile creare un blocco di commenti aggiungendo più commenti a riga singola uno dopo l'altro:

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

Questo tipo di commento può essere usato su una propria riga o alla fine di una riga di codice. Tuttavia, perché corrono alla fine della linea, essi non possono essere utilizzati in una linea di codice

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

Commentando usando il preprocessore

Grandi blocchi di codice possono anche essere "commentati" usando le direttive del preprocessore #if 0 e #endif . Ciò è utile quando il codice contiene commenti su più righe che altrimenti non sarebbero nidificati.

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

Possibile insidia dovuta ai trigrafi

C99

Durante la scrittura di // commenti delimitati, è possibile fare un errore tipografico che influenza le loro operazioni previste. Se uno digita:

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

Il / alla fine è stato un refuso ma ora verrà interpretato in \ . Questo perché il ??/ forma un trigramma .

Il ??/ trigraph è in realtà una notazione a mano lunga per \ , che è il simbolo di continuazione della linea. Ciò significa che il compilatore pensa che la riga successiva sia una continuazione della linea corrente, ovvero una continuazione del commento, che potrebbe non essere ciò che è inteso.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow