31.5.3 コンパイラオプションの優先順位
(1) 指定個所による優先順位
コンパイラオプションを指定した個所によって,優先順位が高くなります。
- ccbl2002コマンドの場合
- 次の順序で,コンパイラオプションの優先順位が高くなります。
優先度 | 指定個所 | オプションの形式 |
---|
1 | ccbl2002のコマンド行に指定したオプション | 新形式 |
2 | 環境変数CBLCOPT2002に指定したオプション | 新形式 |
- ccblコマンドの場合
- 次の順序で,コンパイラオプションの優先順位が高くなります。
優先度 | 指定個所 | オプションの形式 |
---|
1 | ccblのコマンド行に指定したオプション | 旧形式 |
2 | 環境変数CBLCOPTに指定したオプション | 旧形式 |
3 | ccblコマンドで暗黙的に仮定されるオプション | 新形式 |
環境変数CBLCOPT2002,CBLCOPTについては,「31.6 コンパイラ環境変数」を参照してください。
(2) オプション間の優先順位
コンパイラオプションには,オプション同士が背反の関係となっていたり,あるオプションを指定するとほかのオプションが仮定されたりするものがあります。このようなオプション間の優先順位を,次に示します。
(a) あとに指定した方のオプションが有効となる場合
次のオプションを同時に指定した場合,あとに指定した方のオプションが有効となります。
- -DigitsTrunc/-Comp5
- -V3Rec/-EquivRule
- -CompatiV3/-EquivRule
(b) オプションを指定すると,ほかのオプションが無効となる場合
次のコンパイラオプションを指定した場合,無効となるオプションがあります。
指定したオプション | 無効となるオプション |
---|
-MainNotCBL | |
-Compile | |
-Compile,CheckOnly | - -DebugInf
- -DebugCompati
- -DebugData
- -TDInf
- -CVInf
- -DebugRange
- -TestCmd
|
-StdMIA -Std85 -Std2002 | - -V3Spec
- -StdVersion
- -CompatiV3※2
- -H8Switch
- -Cblctr
- -IgnoreLCC
- -JPN※2
- -CmDol
- -Comp5
- -NumAccept
- -V3Rec※2
- -EquivRule,NotAny
- -SQL
- -BinExtend
- -MaxDigits38※4
- -IntResult,DecFloat40※4
|
-StdMIA,13 | - -EquivRule,StdCode
- -Bin1Byte
|
-V3Spec | - -Comp5
- -CmAster
- -BinExtend
- -CBLVALUE
- -Bin1Byte
- -NumAccept
- -CmDol
- -MaxDigits38※4
- -IntResult,DecFloat40※4
|
-Repository,Gen | |
-PIC | |
-MultiThread | |
-UniObjGen※1 | - -JPN※2
- -CompatiV3※2※3
- -V3Rec※2※3
|
-MaxDigits38※4 | |
-IntResult,DecFloat40※4 | - -Compati85,Power(-Compati85,All指定時も含む)
- -CompatiV3※2
|
- 注※1
- HP-UX(IPF),AIX(32),AIX(64),Linux(x86),Linux(x64)で有効です。
- 注※2
- HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64),Linux(IPF64)で有効です。
- 注※3
- Linux(x86),Linux(x64)の場合,コンパイラ環境変数CBLV3UNICODEにYESを指定すると,-UniObjGenを同時に指定しても-CompatiV3および-V3Recは有効となります。
- 注※4
- HP-UX(IPF64),Linux(x64)で有効です。
(c) 仕様チェックオプションを複数指定した場合
-StdMIAオプション,-Std85オプション,-Std2002オプションは,同時に指定できません。同時に指定した場合,警告のメッセージが出力され,次の優先順位で有効となります。
- -Std2002オプション
- -Std85オプション
- -StdMIAオプション
(d) オプションを指定することによって,仮定されるオプション
次のコンパイラオプションを指定した場合,仮定されるオプションがあります。
指定したオプション | 仮定されるオプション |
---|
-V3Spec | |
-CompatiV3※1 | - -JPN,Alnum※2
- -V3Rec,Variable
|
-DebugCompati | |
-DebugData | |
-DebugRange | |
-TestCmd | |
-TDInf | |
-TDInfと-Optimize,3を同時に指定 | - -Optimize,2
(-Optimize,3を指定しても-Optimize,2が仮定される)
|
-CVInf | |
-StdMIA,14 | |
-PIC | |
-MaxDigits38,-IntResult,DecFloat40,および-Optimize,3を同時に指定※3 | - -Optimize,2
(-Optimize,3を指定しても-Optimize,2が仮定される)
|
- 注※1
- HP-UX(IPF),HP-UX(IPF64),AIX(32),AIX(64),Linux(IPF64)で有効です。
- 注※2
- コンパイラ環境変数CBLV3UNICODEにYESを指定し,かつ-UniObjGenを指定した場合,-CompatiV3を指定しても-JPN,Alnum は仮定されません。
- 注※3
- HP-UX(IPF64),Linux(x64)で有効です。
(e) ほかのオプションの指定を必要とするオプション
次のコンパイラオプションは,同時に指定する必要があるオプションがあります。
指定したオプション | 同時に指定する必要があるオプション |
---|
-UniEndian※1 | -UniObjGen※1 |
-MaxDigits38※2 | -IntResult,DecFloat40※2 |
- 注※1
- HP-UX(IPF),AIX(32),AIX(64),Linux(x86),Linux(x64)で有効です。
- 同時に指定する必要があるオプションの指定がない場合,指定したオプションは無視されます。
- 注※2
- HP-UX(IPF64),Linux(x64)で有効です。
- 同時に指定する必要があるオプションの指定がない場合,コンパイルエラーとなります。
(3) 同じオプションを重複して指定した場合の規則
同じオプションを重複して指定した場合,次の規則に従ってオプションが決定されます。なお,オプションごとのサブオプションの指定規則については,「31.5.4 コンパイラオプションの一覧」を参照してください。
(a) 背反関係にあるサブオプション同士を指定した場合
最後に指定されたオプションが有効となります。
- (例)
- -Compile,{CheckOnly|NoLink}
- に対して
- -Compile,CheckOnly -Compile,NoLink
- と指定した場合,-Compile,NoLinkが有効となります。
ただし,次の場合は,特定のサブオプションが有効となります。
- -TestCmd,Fullオプションと-TestCmd,Breakオプション,または-TestCmd,Fullオプションと-TestCmd,Simオプションを重複して指定した場合
-TestCmd,Fullオプションが有効となります。
- -JPN,Alnumオプションと-JPN,V3JPNオプションを重複して指定した場合
-JPN,V3JPNオプションが有効となります。
- -Std85,Highオプション,-Std85,Middleオプション,-Std85,Lowオプションを重複して指定した場合
次の優先順位で有効となります。
- -Std85,Lowオプション
- -Std85,Middleオプション
- -Std85,Highオプション
(b) 省略可能なサブオプション同士,または複数選択できるサブオプション同士を指定した場合
前に指定したサブオプションの指定を引き継ぎ,あとに指定したサブオプションの指定が追加で有効となります。
- (例)
- -ErrSup {,I|,W}+
- に対して
- -ErrSup,I -ErrSup,W
- と指定した場合,IサブオプションとWサブオプションの両方が有効となります。これは,「-ErrSup,I,W」を指定した場合と同じです。
(4) オプションの打ち消し指定
デフォルト設定や環境変数などで指定済みのオプションを,コンパイル時に打ち消したい場合は,プリフィクス'no'の付いたコンパイラオプションを使用します。
例えば,環境変数CBLCOPT2002でオプション「-Details」が指定されている場合,コマンドラインで「ccbl2002 -noDetails …」と指定すると,環境変数CBLCOPT2002で設定済みのオプション「-Details」を打ち消せます。
- 規則
- オプションにデフォルト値の設定がある場合,プリフィクス'no'は指定できません。この場合,オプションのデフォルト値を指定することで,オプションを打ち消します。
例えば,環境変数CBLCOPT2002でオプション「-Optimize,3」が指定されている場合,デフォルト値に戻したいときは,コマンドラインで「-Optimize,1」を指定します。
- 通常のオプションと打ち消しのオプションを同時に指定した場合は,あとに指定したオプションが有効となります。
- 注意事項
- コンパイルリストに出力されるオプション一覧や,-Detailsオプションを指定した場合にコマンドラインへ出力されるコンパイラオプションの詳細情報表示では,no指定のコンパイラオプションは表示されません。コンパイラオプションとして有効となったオプションだけが表示されます。