23

すべてのコンパイラが受け入れる必要があるソース行の最大長は? C++11 で変更されましたか? もしそうなら、古い値は何でしたか?

私がこの質問をするのは、重いプリプロセッサ ブードゥーをやっているからです (残念ながら、テンプレートはそれをカットしません)。そうすると、すぐに行が大きくなる傾向があります。安全な側にとどまりたいので、行が長すぎるためにプラットフォーム Y のコンパイラ X が私のコードを拒否する可能性について心配する必要はありません。

4

1 に答える 1

32

C++2003、Annex B、(参考) 実装数量(申し訳ありませんが、C++2011 は手元にありません)

2) 制限により、以下に記載されているものやその他のものを含む数量が制限される場合があります。各数量に続く括弧内の数字は、その数量の最小値として推奨されます。ただし、これらの量は単なるガイドラインであり、準拠を決定するものではありません。

…</p>

  • 1 つの論理ソース行の文字 [65 536]。

あなたはこれらについて尋ねませんでしたが、役に立つかもしれません:

  • 完全な式内の括弧で囲まれた式のネスト レベル [256]。
  • 1 つの変換単位で同時に定義されるマクロ識別子 [65 536]。
  • 1 回のマクロ呼び出しでの引数 [256]。
  • 内部識別子またはマクロ名の文字数 [1 024]。
  • 1 つの変換単位で同時に定義されるマクロ識別子 [65 536]。
  • 1 つのマクロ定義のパラメーター [256]。


追記:「論理的なソースの1行」とは何かということは注目に値します。論理ソース行は、後にあるものです。

  • 物理ソース ファイルの文字は、基本的なソース文字セットにマップされます
  • Trigraph シーケンス (2.3) は、対応する単一文字の内部表現に置き換えられます
  • 改行文字と直前のバックスラッシュ文字の各インスタンスが削除されます

論理ソース行は、以前のものです。

  • ソースファイルは前処理トークンに分解されます
  • 前処理ディレクティブが実行され、マクロ呼び出しが展開されます。

[ C++ 2003、2.1 Phases of Translationからの引用]

したがって、OPの懸念がマクロが妥当な行の長さを超えて拡大することである場合、私の答えは無関係です。OPの懸念が彼のソースコード( 、 を処理した後\\nが長すぎる可能性があることである場合、私の答えは有効です。

于 2012-05-09T16:03:29.397 に答える