Renesas Synergy™

FAQ 104468 : コマンドオプション -fextend_to_int を指定してコンパイルすると演算結果が期待値と異なる場合があります.

回答

コマンドオプション -fextend_to_int を指定すると, 最初にchar型をintに拡張します.
したがって次の例のようなプログラムでは, オプションを指定したときとしないときでは演算結果が異なります.

[プログラム例]

main()
{
    unsigned char c=0xff, cc=0x00;
    if(c!=~cc)
        printf("Ok\n"); /* -fextend_to_int指定時 */
    else
        printf("NG\n"); /* -fextend_to_int指定なし */
}

このプログラム例の場合, まず, charをintへ拡張してから~演算子を実行します.
その結果, 上位側は常にFFになり, ifの比較結果は常に真になります.

適用製品

M16Cシリーズ,R8Cファミリ用C/C++コンパイラパッケージ [M3T-NC30WA]
他にご質問がございましたら、リクエストを送信してください