このネタをサボりだしてから1年以上経過してしまいました・・・ISO/IEC14882:2003(E)(俗に言うC++の規格書)をほじろうというこの企画・・・サボっててすいません。
マグさんのお世話で大変だったの・・・(ウソです。単なるサボりです。)
※久しぶりなので今までのまとめ
【C++】Literals(その1:整数リテラル)
【C++】Literals(その2:文字リテラル)
【C++】Literals(その3:実数リテラル)
【C++】Literals(その4:文字列リテラル)
【C++】Literals(その5:真理値リテラル)
今回のお題は、本編ではなくて、Appendix(補足)の内容でございます。
お題は、
【Annex B(informative) Inplementation quantities】
でございます。
「コンパイラ作る時はコレくらいの処理はできるようにしとけや」な後ろにくっついている参考資料であります。
これは【規格に沿ったコンパイラなら必須】というわけではないのでご注意を。
というわけで、まず前文から。
1, Because computers are finite, C + + implementations are inevitably limited in the size of the programs they
can successfully process. Every implementation shall document those limitations where known. This documentation
may cite fixed limits where they exist, say how to compute variable limits as a function of
available resources, or say that fixed limits do not exist or are unknown.
コンピュータの資源は有限なので、制限があるのは止むを得ない。なので、「限界を明記」するか、「限界を計算」できるようにするか、「制限は無いよ」とするか、「制限なんて解らない」とするのか・・・とにかく処理系の制限について語るのを推奨していますね。というか、解らないコンパイラでの開発は怖い気が・・・
2 The limits may constrain quantities that include those described below or others. The bracketed number
following each quantity is recommended as the minimum for that quantity. However, these quantities are
only guidelines and do not determine compliance.
以下(このあと記述します)の項目に関しては、この数以上に制限してもよいということです。(後述のもの)括弧内が最小値の推奨値です。※ここでうたってますが、あくまでも【ガイドライン】ですので・・・
では、内容を(量があるので代表的なものだけ・・・)
Nesting levels of compound statements, iteration control structures, and selection control structures
[256].
複合文(compound statements, {}で囲まれた処理)、繰り返し文(iteration control structures, forループとかwhileループとか)、選択文(selection control structures, ifとかswitch)のネスト数 -----> [256]
# にーちゃん、いつここの処理通るの・・・
Nesting levels of conditional inclusion [256].
条件付き取込み(conditional inclusion, #if HOGE ~ #endifのような条件)のネスト数 -----> [256]
# 本当に#defineされてる条件はどれなのか・・・(最近のVisual StudioのIDEなら有効な#defineの色が変わってすぐ解りますが・・・)
Identifiers with block scope declared in one block [1024].
1つのブロック内で、そのスコープ範囲内の識別子 -----> [1024]
# 僕は頭が悪いのでスコープ内に10個も変数があればお腹いっぱいです・・・
Characters in one logical source line [65536].
1行内の文字数 -----> [65535]
# char sql[] = "select * from hoge where ・・・・以下ひたすら長いSQL ";
# 【"hoge" \ 改行 "hoge" ・・・】で文字リテラル連結して頂ければお互いハッピー・・・
※2008/07/03 774RRさんからご指摘を頂きました。「論理行」であるので、文字リテラルを改行で連結しても論理的に1行・・・でした。自分のおミソの悪さをゴメンナサイです・・・(´ω`;人)
※改行前にバックスラッシュも忘れてたので修正しております・・・(´ω`;人)
※2007/07/03 zakさんからご指摘を頂きました。文字リテラルの改行して連結→バックスラッシュ不要(あっても大丈夫ですが・・・)です。
Number of characters in an internal identifier or macro name [1024].
内部識別子、マクロの文字数 -----> [1024]
# #define HOGE_WANKUMA_FOO_BAR_UWA_NANIO_O_SURU_FUJIKO_・・・・・・・・・
Arguments in one function call [256].
関数の引数 -----> [256]
# 構造体とかクラスとかにして纏めて渡していただけないでしょうか・・・
うーん、フルに使うとお友達無くしそうですが、「ここまではOK」という線引きができてると何となく精神衛生上よろしいかも。
お暇な時にお使いのコンパイラのマニュアルを見ると、「こんなに使わないんだからそこまで実装しないよ・・・」とか「先生!言われたことは義務じゃなくても守ります!」なコンパイラか解りますね。
ではでは、次回はそんなに間が空かないうちに書きたいです。。。