-check


コンパイル・オプション / ソースオプション

[指定形式]

-check = { nc | ch38 | shc}

[詳細説明]

-

R8C,M16Cファミリ用Cコンパイラ、H8, H8S, H8SXファミリ用C/C++コンパイラおよびSuperHファミリ用C/C++コンパイラ向けにコーディングしたC/C++言語ソースファイルを本コンパイラへ流用する際、互換性に影響するオプション指定、ソース記述をチェックすることができます。

-

check=ncでは、R8C,M16Cファミリ用Cコンパイラとの互換性をチェックします。
チェックされるオプションや型には、次のようなものがあります。

-

オプション:signed_char, signed_bitfield, bit_order=left, endian=big, dbl_size=4

-

inline、enum型、#pragma BITADDRESS、#pragma ROM、#pragma PARAMETER、asm()

-

-int_to_shortの指定がないときに、signed short範囲外の定数をint,signed int型へ代入、あるいはunsigned short範囲外の定数をint型またはunsigned int型へ代入

-

signed short, unsigned short共範囲外の定数をlong, long long型へ代入

-

signed short範囲外の定数とint, short, char型(char型は符号付き除く)との比較式

-

check=ch38では、H8,H8S,H8Sファミリ用C/C++コンパイラとの互換性をチェックします。
チェックされるオプションや型には、次のようなものがあります。

-

オプション:unsigned_char, unsigned_bitfield, bit_order=right, endian=little, dbl_size=4

-

__asm、#pragma unpack

-

signed longの最大値より大きな定数との比較式

-

-int_to_shortの指定がないときに、signed short範囲外の定数をint,signed int型へ代入、あるいはunsigned short範囲外の定数をint型またはunsigned int型へ代入

-

signed short, unsigned short共範囲外の定数をlong, long long型へ代入

-

signed short範囲外の定数とint, short, char型(char型は符号付き除く)との比較式

-

check=shcでは、SuperHファミリ用C/C++コンパイラとの互換性をチェックします。
チェックされるオプションや型には、次のようなものがあります。

-

オプション:unsigned_char, unsigned_bitfield, bit_order=right, endian=little, dbl_size=4 , round=nearest

-

#pragma unpack

-

volatile修飾した変数

-

表示された項目により、それぞれ次の項目を確認ください。

-

オプション:言語仕様で規定されていない実装依存の内容がコンパイラ間で異なっています。メッセージで出力されたオプションの選択を確認してください。

-

拡張仕様:プログラムの動作に影響を及ぼす可能性がある拡張仕様です。メッセージで出力された拡張仕様の記述を確認してください。

[備考]

-

dbl_size=4が有効な時に、R8C, M16Cファミリ用Cコンパイラ、H8, H8S, H8SXファミリ用C/C++コンパイラおよびSuperHファミリ用C/C++コンパイラと浮動小数点関連の変換/ライブラリの計算結果が異なる場合があります。
dbl_size=4は、本コンパイラでは、double型およびlong double型を32ビットにしますが、各種R8C, M16Cファミリ用Cコンパイラ(fdouble_32)、H8, H8S, H8SXファミリ用C/C++コンパイラ(double=float) およびSuperHファミリ用C/C++コンパイラ(double=float)では、double型のみ32ビットにします。

-

unsigned int型とlong型をオペランドとする二項演算(加減乗除や比較など)に対する結果が、SuperHファミリ用C/C++コンパイラと異なる場合があります。
本コンパイラではオペランドをunsigned long型に変換してから演算しますが、SuperHファミリ用C/C++コンパイラ(ただし、strict_ansiを指定しないとき)では、signed long long型に変換してから演算します。

-

volatile修飾した変数に対し、読み出しや書き込みのサイズが、SuperHファミリ用C/C++コンパイラと異なる場合があります。
volatile修飾したビットフィールドは、本コンパイラでは宣言型より小さなサイズでアクセスすることがありますが、SuperHファミリ用C/C++コンパイラでは宣言型のサイズ通りにアクセスします。

-

構造体およびビットフィールドメンバの割り付けについては、本オプションでメッセージを出力しません。割り付けを意識した宣言をしている場合には、「コンパイラ言語仕様」の章の「データの内部表現と領域」の項目を参照してください。

-

R8C, M16Cファミリ用Cコンパイラ(fextend_to_intを指定しない)では、条件式で汎整数拡張を行わずに評価したコードを生成するので、本コンパイラの生成コードと動作が異なる場合があります。