私は6ビットの数字を取り、最初の3ビットを取り除き、それに基づいて "r"、 "w"または "o"を返すという単純な関数をC言語で書いています。「警告:戻り値は、キャストのないポインタから整数を作る」とはCの意味ですか?
しかし、コンパイルすると、 'returnはキャストなしでポインタから整数を作ります'という警告が表示されます。次に、私がプログラムを実行すると、関数が間違いなく3つのうちの1つではない奇妙な文字を返すことがわかります。
ここでは何が起こっていますか?前もって感謝します。
は、ここに私の機能です:
char
readorwrite(int opcode)
{
if (opcode >> 3 == 4) {
return "r";
} else if (opcode >> 3 == 5) {
return "w";
} else {
return "o";
}
}
ニールバターワースは、あなたがすべき今削除答えで指摘shiftやANDやORなどのビット単位の演算子を、等価などの比較と混在させることには非常に注意してください。シフト演算子は、比較よりも優先順位が高くなります。しかし、私はそれをチェックするために優先順位テーブルに行っていなければなりませんでした。私はCの初心者ではありません。ビットマスキングとビットシフトの際に特に問題があります。コードを見直すために私に提示されたかどうかは、コンパイラが意図したとおりに正確に処理するにもかかわらず、シフト操作の周りに余分な括弧を要求します。 –