【現象】
コンパイル時、以下のエラーが発生し、コンパイルできない
fatal error C1061: コンパイラの制限 :
プログラム内のブロックの入れ子のレベルが深すぎます。
【発生条件】
パターン1
以下を両方満たす場合
・1つの翻訳単位の作業場所節、ファイル節において、
OCCURS句を指定したデータ項目数が約256個(※)を超えている
・データ項目に初期値を与えるオプション
-vi、-vs、-vz、-vnn(nn は 16進数字)を指定
パターン2
・1つの段落中に含まれる以下の手続きのうち、
内部的な特定条件を満たすものが約256個(※)を超えている
- 内部10進項目同士の転記
- 日本語項目、日本語編集項目の比較
- 中間結果の桁数が 10桁を超える除算
- SIZE ERROR指定付きの演算
※現象発生するデータ項目数、手続き数は記述により変動します
【回避策】
パターン1
以下のいずれか
・翻訳単位を分割し、1つの翻訳単位における OCCURS句付きデータ項目数を
256個以下とする
・データ項目に初期値を与えるオプションを指定しない
(初期化が必要な場合、プログラム中で明示的に初期化を行うコードを記述)
パターン2
・ラベルを挿入し、段落を分割する
※最適化オプション -O2 を指定した結果、参照していないラベルが
削除され、段落が結合される場合があります
その場合、-O2 の指定をやめるか、ラベルを参照する文を
加える必要があります。
【制限解除予定】
次回リビジョンアップ(時期未定)