evaluar la expresión con barra invertida en medio de la statement

Supongamos que en C, tengo el siguiente código:

i=5 \ +6; 

Si imprimo i , me da 11.

No entiendo cómo se ejecuta correctamente el código anterior. A primera vista, supuse que sería un error del comstackdor debido a un token no reconocido. ¿Alguien puede explicar la lógica? ¿Está relacionado con la máxima lógica de munch?

Una barra invertida al final de una línea le dice al comstackdor que ignore el carácter de nueva línea.

Es una forma de formatear líneas para que sean legibles para los humanos sin interrumpir el texto de origen. Por ejemplo, si tiene una cadena larga entre comillas, puede usar una barra diagonal inversa para continuar la cadena en una nueva línea sin insertar un carácter de nueva línea en la cadena.

(Esto fue más útil antes de que el estándar C agregara la propiedad de que las cadenas adyacentes, como "abc" "def" , están concatenadas. Ahora puede poner cadenas en líneas consecutivas, y se concatenarán. Antes de eso, tenía que usa la barra invertida para hacerlo.)

Hoy en día, el uso más común de la barra diagonal inversa es, como señala Heretolearn , continuar las definiciones de macros del preprocesador. A diferencia de las declaraciones C normales, las instrucciones del preprocesador deben estar en una sola línea. Sin embargo, algunas definiciones de macros del preprocesador son bastante largas. Para darles un formato agradable (algo), una definición se distribuye en varias líneas físicas, pero la barra diagonal inversa las convierte en una sola línea para el comstackdor (incluido el preprocesador).

Una barra invertida seguida de un carácter de nueva línea es eliminada completamente del texto de origen por el comstackdor, a diferencia de un carácter de nueva línea por sí mismo. Así que el texto de origen:

 abc\ def 

es equivalente al identificador único abcdef , no a abc def . Puede usarlo en el medio de cualquier operador u otra construcción de lenguaje, excepto las secuencias trigráficas (las secuencias trigráficas, como ??= , se convierten en caracteres de reemplazo, como # , antes del procesamiento de barra invertida-nueva línea):

 MyStructureVariable-\ >MemberName IncrementMe+\ + 

Sin embargo, no hagas eso. Úsalo razonablemente.

La práctica de escapar de las nuevas líneas al final de una línea es, de hecho, marcar la continuación de la statement en la siguiente línea. Aparentemente, eso era necesario en los comstackdores de C antiguos. Solo hay un lugar en el que estoy seguro de que todavía se necesita y es en las definiciones de funciones de macros, algo que generalmente está mal visto en C ++.

Una línea continua es una línea que termina con una barra invertida,. La barra invertida se elimina y la siguiente línea se une con la actual. No se inserta ningún espacio, por lo que puede dividir una línea en cualquier lugar, incluso en medio de una palabra. (Generalmente es más legible dividir líneas solo en el espacio en blanco).

La barra diagonal inversa final en una línea continua se conoce comúnmente como una nueva línea de barra invertida.

Si hay espacio en blanco entre una barra invertida y el final de una línea, es una línea continua. Sin embargo, como esto suele ser el resultado de un error de edición, y muchos comstackdores no lo aceptarán como una línea continua, GCC le advertirá al respecto.

Referencia