認識しておく必要のある固定形式と自由形式の相違点
- 更新に使用可能なファイルは自動的に削除に使用可能にはならない
-
固定形式ファイル定義の「ファイル・タイプ」記入項目に U を指定する と、ファイルは更新と削除の両方の操作を許可するようにオープンされます。 自由形式ファイル定義では、削除操作を許可するようにファイルがオープンされるようにするには、USAGE(*DELETE) を 明示的に指定する必要があります。
- EXTNAME および EXTFLD キーワードに対する引用符で囲まれていない名前
-
引用符で囲まれていない名前の解釈は、固定形式と自由形式で異なります。
- 固定形式では、引用符で囲まれていない名前は、外部名であると解釈されます。
- 自由形式では、引用符で囲まれていない名前は、名前付き定数であると解釈されます。
ヒント: 固定形式のコードと 自由形式のコードが混在している場合、名前ではなくリテラルを使用するように、固定形式の EXTNAME および EXTFLD キーワードを 変更することを検討してください。例えば、EXTNAME(myfile) を EXTNAME('MYFILE') に、EXTFLD(myextfld) を EXTFLD('MYEXTFLD') に変更します。 - DTAARA キーワードに対する引用符で囲まれていない名前
-
最初のオペランドの引用符で囲まれていない名前の解釈は、 固定形式と自由形式で異なります。
- 固定形式では、DTAARA(myDtaaara) のように DTAARA の最初のオペランドが名前である場合、 このオペランドは、システム上のデータ域の名前 *LIBL/MYDTAARA であると解釈されます。
- 自由形式では、DTAARA(myDtaaara) のように DTAARA の最初のオペランドが名前である場合、 このオペランドは、データ域の名前を含んでいる文字フィールドまたは名前付き定数の名前であると 解釈されます。データ域の名前を直接指定するには、 名前を引用符で囲んで DTAARA('MYDTAARA') のように指定します。
ヒント: 固定形式のコードと 自由形式のコードが混在している場合、名前ではなくリテラルを使用するように、固定形式の DTAARA キーワードを 変更することを検討してください。DTAARA(myDtaara) を DTAARA('MYDTAARA') に変更します。
OVERLAY キーワードは、他のサブフィールドをオーバーレイするためにのみ使用できます。

- 自由形式では、POS キーワードを使用してデータ構造内のサブフィールドの位置を指定する必要があります。 OVERLAY キーワードは、あるサブフィールドを別のサブフィールドにオーバーレイするためにのみ使用できます。

- END-DS、END-PI、および END-PR をコーディングするための要件
-
サブフィールドをコーディングすることが許可されている データ構造 (LIKEDS も LIKEREC キーワードも指定されていないデータ構造) の 場合、別のステートメントとして、または、サブフィールドをコーディング しない場合は DCL-DS ステートメントの末尾に、END-DS を忘れずに指定する必要があります。
プロシージャー・インターフェース の場合、別のステートメントとして、 または、パラメーターをコーディングしない場合は DCL-PI ステートメントの 末尾に、END-PI を忘れずに指定する必要があります。
プロトタイプの場合、 別のステートメントとして、または、パラメーターをコーディングしない場合は DCL-PR ステートメントの 末尾に、END-PR を忘れずに指定する必要があります。
- 定義名の末尾にある省略符号
-
定義仕様またはプロシージャー仕様において、名前の末尾に省略符号をコーディング し、ステートメントの残りの部分を次の仕様に指定することに慣れている場合、 この方法は自由形式では可能ではありません。名前が省略符号で終わっている場合、 次の行にある最初のキーワードが名前の一部であると解釈されます。
例 有効かどうか フィールド名 説明 dcl-s name... char(10);なし NAMECHAR プログラマーは名前が 2 番目の行に継続されることを意図していませんが、 コンパイラーは CHAR が名前の一部であると 想定します。フィールド名は NAMECHAR であり、(10) は構文エラーであると見なされます。 dcl-s name char(10);あり NAME 名前は省略符号を付けずにコーディングされています。 したがって、コンパイラーは次行で名前の終わりを検索しません。 dcl-s continued... name char(10);あり CONTINUEDNAME 名前は次行に継続されているため、「continued」の末尾にある省略符号は有効です。
