C言語・情報学の初学者です。
とあるC言語の試験問題について、理解できない部分があり質問させていただきます。
【試験問題内容】
単体テストにて以下の不具合が発生した。原因を修正し、プログラムを修正せよ。
なお単体テストの結果は、32ビットOSの汎用PC上で実施された。
不具合の対象関数:func
不具合の内容:subfuncの戻り値判定「if(s2_ret == RET_NG)」で必ずFALSEになる。
typedef short s2 ;
#define RET_OK 0x0000
#define RET_NG 0xFFFF
s2 func(void)
{
s2 s2_ret;
s2_ret = subfunc (xx, yy); /subfuncは戻り値としてRET_NGを返す/
if (s2_ret == RET_NG)
{
com_internal_err ();
}
以下略
【解答】
s2_retはS2型、RET_NGは直値(0xFFFF)であるため、型が一致しない。
そのため、int型に型変換して比較され、(-1)と65535の比較になり、FALSEになる。
【疑問】
上記回答の「int型に型変換して比較され、(-1)と65535の比較になり」という部分がわかりません。
特に-1という値がどこから出てきたのかがわかりません。
ご回答よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー