2012-05-09 16 views
22

¿Cuál es la longitud máxima de una línea fuente todos los compiladores son necesarios para aceptar? ¿Cambió en C++ 11? Si es así, ¿cuál era el valor anterior?Límite de longitud de línea de origen

Estoy haciendo esta pregunta porque estoy haciendo un pesado vudú de preprocesador (desafortunadamente, las plantillas no lo cortarán), y hacerlo tiene la tendencia de hacer que las líneas crezcan muy rápido. Quiero mantenerme a salvo, así no tendré que preocuparme por la posibilidad de que el compilador X en la plataforma Y rechace mi código debido a las líneas demasiado largas.

+0

Prefiero comprobar si hay alguna manera de evitar el preprocesador vudú. Es más probable que dependa de un detalle de implementación. –

+0

No creo que sea difícil hacer que un compilador de C++ acepte infinitas longitudes de línea, pero nunca he escrito uno. –

+0

@stefanbachert: No puedo evitarlo, ese es el problema. Además, el objetivo de la pregunta es saber dónde comienza la tierra definida por la implementación, de modo que pueda evitar entrar en ella. – Fanael

Respuesta

30

C++ 2003, Anexo B, (Informativo) cantidades de implementación (lo siento, no tienen C++ 2011 práctico)

2) Los límites pueden limitar las cantidades que se incluyen los descritos debajo u otros. El número entre corchetes siguiendo cada cantidad se recomienda como el mínimo para esa cantidad. Sin embargo, estas cantidades son solo directrices y no determinan el cumplimiento.

...

  • caracteres en una línea fuente lógica [65 536].

Usted no pidió acerca de estos, pero podría ser útil, también:

  • niveles de imbricación de las expresiones entre paréntesis dentro de una plena expresión [256].
  • Identificadores de macro definidos simultáneamente en una unidad de traducción [65 536].
  • Argumentos en una macro invocación [256].
  • Número de caracteres en un identificador interno o nombre de macro [1 024].
  • Identificadores de macro definidos simultáneamente en una unidad de traducción [65 536].
  • Parámetros en una definición de macro [256].


PostScript: Vale la pena señalar que "una línea fuente lógica" es. Una línea fuente lógica es lo que tiene después:

  • caracteres del archivo de origen físicas se asignan a la fuente básica de carácter establecer
  • Trigraph secuencias (2.3) se sustituyen por los correspondientes representaciones internas de un solo carácter
  • Cada instancia de un carácter de nueva línea y un carácter de barra invertida inmediatamente anterior se elimina

La línea de fuente lógica es lo que tiene antes de:

  • El archivo fuente se descompone en tokens de preprocesamiento
  • preprocesamiento d las irectivas se ejecutan y las macrovocaciones se expanden.

[citas de C++ 2003, 2.1 Fases de traducción]

lo tanto, si la preocupación de la OP es que las macros se expanden hasta más allá de una longitud de línea razonable, mi respuesta es irrelevante. Si la preocupación del OP es que su código fuente (después de tratar con \, \n) puede ser demasiado largo, mi respuesta es válida.

+7

Solo para confirmar, esto es lo mismo en C++ 11. –

+3

+1: Es el samne en C++ 11: "- Caracteres en una línea de origen lógica [65 536]". Anexo B.2 –

+0

Solo decirlo: un compilador puede rechazar (o hacer cualquier otra cosa) un archivo que contenga el código "hola mundo" habitual debido a líneas demasiado largas. Eso es un comportamiento indefinido entonces. Me pregunto por qué no tiene una declaración clara en su respuesta sobre las consecuencias de violar el límite de "líneas largas" ... –

Cuestiones relacionadas