J'écris une fonction simple en C dont le but est de prendre un nombre de 6 bits, d'élaborer les 3 premiers bits, et sur cette base, retourner un "r", "w" ou "o".Qu'est-ce que "Avertissement: return rend un entier à partir d'un pointeur sans cast" signifie en C?
Cependant, lorsque je compile, j'obtiens cet avertissement: 'return rend l'entier du pointeur sans cast'. Puis, quand je cours le programme, je trouve que la fonction retourne un caractère étrange qui n'est certainement pas l'un des trois que je suis après.
Que se passe-t-il ici? Merci d'avance.
Voilà ma fonction:
char
readorwrite(int opcode)
{
if (opcode >> 3 == 4) {
return "r";
} else if (opcode >> 3 == 5) {
return "w";
} else {
return "o";
}
}
Neil Butterworth a souligné dans une réponse maintenant supprimé que vous devriez soyez très prudent lorsque vous mélangez des opérateurs bit à bit tels que shift ou AND ou OR avec des comparaisons telles que l'égalité. Les opérateurs de décalage ont une plus grande priorité que les comparaisons; Cependant, je devais aller à la table de préséance pour vérifier cela, cependant, et je ne suis pas un novice en C. Il y a des problèmes particuliers en faisant le bit-masking ainsi que le bit shifting. Si le code m'a été soumis pour examen, je demanderais des parenthèses supplémentaires autour de l'opération de décalage, même si le compilateur le manipulera exactement comme prévu. –