2012-05-09 14 views
22

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

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

+0

私はむしろ、プリプロセッサを避ける方法があるかどうかチェックしたいと思います。これは、実装の詳細に依存するよりも可能性が高い –

+0

C++コンパイラが無限の行の長さを受け入れることは難しいとは思わないでしょうが、私は決して書きませんでした。 –

+0

@stefanbachert:私はそれを避けることはできません、それは問題です。また、問題のポイントは、実装定義の土地がどこに始まるのかを知ることで、その土地にさまようのを避けることができるということです。 – Fanael

答えて

30

C++ 2003、附属書B(参考) 導入量

2(申し訳ありませんが、便利なC++ 2011持っていない))の制限が記載されているものが含まれる量を抑制することができます下または他のもの。その量の最小値として各量に続く括弧内の数字 が推奨されます。ただし、これらの数値は のガイドラインのみであり、準拠性は判断されません。

...つの論理ソース行に

  • 文字[65 536]。

も、あなたはこれらについて質問しませんでしたが、彼らは役に立つかもしれない:完全な式の中括弧で囲まれた式の

  • ネストレベル[256]。
  • マクロ識別子は、1つの翻訳単位で同時に定義されます[65 536]。
  • 1つのマクロ呼び出しの引数[256]。
  • 内部識別子またはマクロ名の文字数[1 024]。
  • マクロ識別子は、1つの翻訳単位で同時に定義されます[65 536]。
  • 1つのマクロ定義のパラメータ[256]。


追記:それは "一つの論理ソース行が" 何であるかは注目に値します。 論理的なソース行は、あなたが持っているものである 後:

  • 物理ソースファイルの文字が 文字が
  • トライグラフ シーケンス(2を設定し、基本的なソースにマップされます。3)単一文字の内部表現
  • 改行文字の各インスタンスと、直前のバックスラッシュ文字は

論理的なソース行を削除され、対応することで置き換えられるが、あなたが前を持っているものです。

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

[C++ 2003からの引用、翻訳の2.1 フェーズ]

OPの懸念は、マクロは、合理的なラインの長さを超えてまで拡大という点であるのであれば、私の答えは無関係です。 OPの懸念が彼のソースコード(\を処理した後、\n)が長すぎるかもしれないということであれば、私の答えは立つ。

+7

これはC++ 11でも同じです。 –

+3

+1:それはC++ 11での "samneです:" - 1つの論理ソース行の文字[65 536]。 "付録B.2 –

+0

ちょうどそれを言う:コンパイラは、長すぎる行のために通常の "hello world"コードを含むファイルを拒否すること(または何か他のことをすること)を許されている。それは未定義の動作です。私は、あなたが "長い行"の制限に違反した結果についてのあなたの答えに明確な声明がないのだろうかと思います... –

関連する問題