saco - C++ comentarios multilínea utilizando barra invertida
como se pone barra invertida (4)
¿Se pueden continuar los // comentarios de estilo a la siguiente línea usando una barra diagonal inversa, como macros multilínea? P.ej
// here is a comment /
and this is more comments /
const char* x = "hello"; // this line of "code" is actually still a comment
int x = 5; // and now an actual line of code
Aquí hay una excelente razón para no hacer esto. El siguiente programa imprime "Esto aparecerá".
#include <iostream>
int main()
{
std::cout << "This "
// A comment ... /
<< "will appear"
// Another comment ... /
<< ", but this won''t"
<< std::endl;
}
¿Por qué? Debido a que la primera /
va seguida de un espacio en blanco, es solo una parte del comentario, no un carácter de empalme de línea. El comportamiento del programa puede cambiar de manera silenciosa y significativa debido al espacio en blanco invisible que se arrastra.
Una razón aún mejor para no hacer esto: g ++ se equivoca, incluso con -pedantic
. Cuando compilo este programa usando g ++, la salida es simplemente "This"; el espacio en blanco al final después de la primera /
se ignora. En mi opinión, así es como debería funcionar, pero no es lo que dice el estándar de idioma. (El empalme de línea ocurre en la fase 2 de traducción. Supongo que uno podría argumentar que los espacios en blanco finales se podrían eliminar en la fase 1, pero no estoy convencido de que ese sea un argumento válido, y no sé si los autores de gcc realmente lo han hecho. hizo ese argumento.) En cualquier caso, g ++ 4.5.2 y Sun CC versión 5.5 no están de acuerdo entre sí.
Si desea comentarios de varias líneas, use /* ... */
, o inserte un //
al principio de cada línea. Prefiero lo último, porque es mucho más fácil decir que una línea dada es parte del comentario. (En realidad, son múltiples comentarios de una sola línea). Cualquier editor decente debería permitirte hacer esto sin escribir //
N veces para N líneas. O, si está comentando un bloque de código, use #if 0 ... #endif
.
Iba a decir que no, pero parece que en realidad (según el resaltado de sintaxis de vim).
Originalmente dije "No, no puedes".
¡Pero todavía digo "No, NO DEBES"!
Utilice / * * / en su lugar.
EJEMPLO:
#include <stdio.h>
int main ()
{
// Begin comment /
continue comment?
return printf ("Hello world!/n");
}
Lo anterior compila, por razones explicadas en otros posts. Pero es INCORRECTO:
"//" están INTENDIDOS para los comentarios de una sola línea (debe usar "/ * * /" para los comentarios anidados y de varias líneas
Confiar en "/" líneas de continuación es una excelente manera de inyectar errores extraños y difíciles de depurar en su programa.
Al igual que comer frijoles a través de la nariz: incluso si PUEDE, probablemente NO DEBE.
EN MI HUMILDE OPINIÓN...
Sí. Las líneas terminadas por un /
se empalman junto con la siguiente línea muy temprano en el proceso de traducción. Ocurre en la fase 2 de la traducción, antes de la eliminación de comentarios y antes de que el preprocesador tenga la oportunidad de hacer su trabajo.
El reconocimiento y eliminación de comentarios se lleva a cabo en la fase 3. Por este motivo, puede convertir un //
comentario en lo que parece ser un comentario de varias líneas utilizando la /
. Esto suele engañar a la mayoría de los analizadores de código fuente de resaltado de sintaxis.
El preprocesador trabaja en la fase 4.
Todo esto significa que puede "multilínea" virtualmente cualquier cosa usando /
, incluyendo comentarios y directivas de preprocesador
#/
d/
e/
f/
i/
n/
e /
ABC /
int i
int main() {
A/
B/
C = 5;
}
PS Tenga en cuenta que la terminación /
no introduce ningún espacio en blanco en la línea de empalme. Esto debería tenerse en cuenta al escribir comentarios de varias líneas utilizando la función /
. Por ejemplo, el siguiente comentario.
// to/
get/
her
representa la única palabra "juntos" y no tres palabras separadas "para obtenerla". Obviamente, el uso incorrecto de /
en los comentarios podría ofuscar drásticamente e incluso distorsionar su significado.