Limite de longueur de ligne Source

Quelle est la longueur maximale d'une ligne de source tous les compilateurs sont nécessaire pour accepter? A-t-il changé en C++11? Si oui, quel était l'ancienne valeur?

Je pose cette question parce que je fais du vaudou de préprocesseur lourd (malheureusement, les modèles ne le couperont pas), et cela a tendance à rendre les lignes grandes très rapidement. Je veux rester du bon côté, donc je n'aurai pas à m'inquiéter de la possibilité que le compilateur X sur la plate-forme y rejette mon code à cause de trop de longues lignes.

23
demandé sur Fanael 2012-05-09 19:59:44

1 réponses

C++2003, Annexe B, (informatif) Quantités d'implémentation (désolé, je n'ai pas C++2011 à portée de main)

2) les limites peuvent limiter les quantités qui comprennent celles décrites ci-dessous ou d'autres. Le nombre entre crochets suivre chaque quantité est recommandé comme minimum pour cette quantité. Cependant, ces quantités sont seulement les lignes directrices et ne déterminent pas la conformité.

  • caractères dans une ligne de source logique [65 536].

Vous n'avez pas demandé à ce sujet, mais ils pourraient être utiles, aussi:

  • niveaux D'imbrication d'expressions entre parenthèses dans une expression complète [256].
  • identificateurs Macro définis simultanément dans une unité de traduction [65 536].
  • Arguments dans une invocation de macro [256].
  • Nombre de caractères dans un identifiant interne ou un nom de macro [1 024].
  • identificateurs Macro définis simultanément dans une unité de traduction [65 536].
  • Paramètres dans une définition de macro [256].


Postscript : Il est intéressant de noter ce qu'est "une ligne source logique". Une ligne source logique Est ce que vous avez Après :
  • les caractères du fichier source physique sont mappés sur la source de base jeu de caractères
  • Trigraphe les séquences (2.3) sont remplacées par des représentations internes à un seul caractère correspondantes
  • Chaque instance d'un un caractère de nouvelle ligne et un caractère antislash immédiatement précédent sont supprimés

La ligne source logique est ce que vous avez avant :

  • le fichier source est décomposé en jetons de prétraitement
  • les directives de prétraitement sont exécutées et les appels de macros sont développés.

[citations de C++ 2003, 2.1 Phases de la Traduction]

Donc, si la préoccupation de L'OP est que les macros se développent au-delà d'une longueur de ligne raisonnable, ma réponse n'est pas pertinente. Si la préoccupation de L'OP est que son code source (après avoir traité \, \n) peut-être trop long, ma réponse est valable.

30
répondu Robᵩ 2012-05-09 16:17:47