Buscar..


Introducción

Los comentarios se utilizan para indicar algo a la persona que lee el código. Los comentarios son tratados como un espacio en blanco por el compilador y no cambian nada en el significado real del código. Hay dos sintaxis utilizadas para los comentarios en C, el original /* */ y el ligeramente más nuevo // . Algunos sistemas de documentación utilizan comentarios con formato especial para ayudar a producir la documentación para el código.

Sintaxis

  • /*...*/
  • //... (solo C99 y posteriores)

/ * * / delimitado comentarios

Un comentario comienza con una barra inclinada seguida inmediatamente por un asterisco ( /* ), y termina tan pronto como se encuentra un asterisco seguido inmediatamente por una barra inclinada ( */ ). Todo lo que se encuentra entre estas combinaciones de caracteres es un comentario y el compilador lo trata como un espacio en blanco (básicamente ignorado).

/* this is a comment */

El comentario de arriba es un comentario de una sola línea. Los comentarios de este tipo /* pueden abarcar varias líneas, como:

/* this is a
multi-line
comment */

Aunque no es estrictamente necesario, una convención de estilo común con comentarios de varias líneas es colocar los espacios y asteriscos iniciales en las líneas posteriores a la primera, y /* y */ en las nuevas líneas, de manera que todas se alineen:

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

Los asteriscos adicionales no tienen ningún efecto funcional en el comentario, ya que ninguno de ellos tiene una barra inclinada relacionada.

Estos /* tipo de comentarios se pueden usar en su propia línea, al final de una línea de código, o incluso dentro de líneas de código:

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

Los comentarios no pueden ser anidados. Esto se debe a que cualquier /* posterior se ignorará (como parte del comentario) y la primera */ alcanzada se considerará como finalización del comentario. El comentario en el siguiente ejemplo no funcionará :

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

Para comentar bloques de código que contienen comentarios de este tipo, que de lo contrario se anidarían, consulte el Ejemplo de comentarios utilizando el preprocesador a continuación.

// comentarios delimitados

C99

C99 introdujo el uso de comentarios de una sola línea de estilo C ++. Este tipo de comentario comienza con dos barras diagonales y se ejecuta hasta el final de una línea:

// this is a comment

Este tipo de comentario no permite comentarios de varias líneas, aunque es posible hacer un bloque de comentarios agregando varios comentarios de una sola línea uno después de otro:

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

Este tipo de comentario se puede usar en su propia línea o al final de una línea de código. Sin embargo, debido a que se ejecutan hasta el final de la línea , no se pueden usar dentro de una línea de código

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

Comentando utilizando el preprocesador

Los grandes fragmentos de código también se pueden "comentar" usando las directivas de preprocesador #if 0 y #endif . Esto es útil cuando el código contiene comentarios de varias líneas que de lo contrario no se anidarían.

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

Posible trampa debido a los trigrafos

C99

Mientras escribe // comentarios delimitados, es posible cometer un error tipográfico que afecte la operación esperada. Si uno escribe:

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

El / al final fue un error tipográfico pero ahora se interpretará en \ . Esto es porque el ??/ forma un trigraph .

El ??/ Trigraph es en realidad una notación a mano para \ , que es el símbolo de continuación de línea. Esto significa que el compilador piensa que la siguiente línea es una continuación de la línea actual, es decir, una continuación del comentario, que puede no ser lo que se pretende.

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow