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.
Prefiero comprobar si hay alguna manera de evitar el preprocesador vudú. Es más probable que dependa de un detalle de implementación. –
No creo que sea difícil hacer que un compilador de C++ acepte infinitas longitudes de línea, pero nunca he escrito uno. –
@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