C++ 2003 Allegato B, (informativa) quantità di implementazione (mi dispiace, non hanno C++ 2011 a portata di mano)
2) I limiti possono limitare le quantità che comprendono quelli descritti sotto o altri. Il numero con parentesi successivo a ciascuna quantità è raccomandato come minimo per tale quantità. Tuttavia, queste quantità sono solo le linee guida e non determinano la conformità.
...
- personaggi in una riga di codice sorgente logica [65 536].
Non avete chiesto su questi, ma potrebbe essere utile, anche:
- Livelli di parentesi di espressioni tra parentesi all'interno di una piena espressione [256].
- Identificatori di macro definiti simultaneamente in un'unità di traduzione [65 536].
- Argomenti in una macro invocazione [256].
- Numero di caratteri in un identificativo interno o nome macro [1 024].
- Identificatori di macro definiti simultaneamente in un'unità di traduzione [65 536].
- Parametri in una definizione macro [256].
Postscript: Vale la pena notare che cosa "una riga di codice sorgente logica" è. Una linea
fonte logica è quello che hai
dopo:
- caratteri di file sorgente fisici sono mappati al carattere di base fonte impostare
- Trigraph sequenze (2.3) sono sostituiti da corrispondenti rappresentazioni interne singolo carattere
- Ogni istanza di un carattere new-line e un carattere rovesciato immediatamente precedente viene cancellato
La linea di source logico è quello di avere prima:
- Il file sorgente viene scomposto in token pre-elaborazione
- pre-elaborazione d le irettive vengono eseguite e le invocazioni macro vengono espanse.
[citazioni da C++ 2003 2.1 Fasi di traduzione]
Quindi, se la preoccupazione del PO è che le macro si espandono per oltre una lunghezza di riga ragionevole, la mia risposta è irrilevante. Se la preoccupazione dell'OP è che il suo codice sorgente (dopo aver trattato con \
, \n
) potrebbe essere troppo lungo, la mia risposta è valida.
fonte
2012-05-09 16:03:29
Preferirei verificare se esiste un modo per evitare il voodoo del preprocessore. È più probabile che dipendere da un dettaglio di implementazione –
Non penserei che sarebbe difficile fare un compilatore C++ ad accettare lunghezze di linea infinite, ma non ne ho mai scritto uno. –
@stefanbachert: Non posso evitarlo, questo è il problema. Inoltre, il punto della domanda è sapere dove inizia la terra definita dall'implementazione, in modo da evitare di vagabondarla. – Fanael