2009-04-25 6 views
3

Ich schreibe eine einfache Funktion in C, deren Zweck es ist, eine 6-Bit-Nummer zu nehmen, die ersten 3 Bits auszuarbeiten und basierend darauf ein "r", "w" oder "o" zurückzugeben.Was bedeutet "Warnung: Rückkehr macht Integer von Zeiger ohne Besetzung" in C bedeuten?

Allerdings, wenn ich kompiliere bekomme ich diese Warnung: 'Return macht Integer von Zeiger ohne Besetzung'. Dann, wenn ich das Programm starte, stelle ich fest, dass die Funktion einen merkwürdigen Charakter zurückgibt, der definitiv keiner der drei ist, nach denen ich suche.

Was geht hier vor? Danke im Voraus.

Hier ist meine Funktion:

char 
readorwrite(int opcode) 
{ 
    if (opcode >> 3 == 4) { 
     return "r"; 
    } else if (opcode >> 3 == 5) { 
     return "w"; 
    } else { 
     return "o"; 
    } 
} 
+3

Neil Butter wies darauf hin, in einer nun gelöscht Antwort sollen zurückkehren sollten Seien Sie vorsichtig beim Mischen von bitweisen Operatoren wie Verschiebung oder UND oder ODER mit Vergleichen wie Gleichheit. Die Shift-Operatoren haben einen höheren Vorrang als die Vergleiche; Ich musste jedoch zur Präzedenztabelle gehen, um das zu überprüfen, und ich bin kein Neuling in C. Es gibt besondere Probleme, wenn Bit-Masking und Bit-Shifting durchgeführt werden. Wenn der Code mir zur Überprüfung präsentiert würde, würde ich zusätzliche Klammern um die Verschiebeoperation anfordern, obwohl der Compiler genau so wie beabsichtigt damit umgehen wird. –

Antwort

18

Das Problem ist, dass "r", "w" und "o" String-Konstanten sind, was bedeutet, dass ihr tatsächlicher Typ char [] oder char *. Das bedeutet, dass Ihre Funktion tatsächlich den Zeiger auf eine mit Null abgeschlossene Zeichenfolge zurückgibt. Für einzelne Zeichen sollten Sie stattdessen "r", "w" und "o" verwenden.

4

Sie geben ein const char *, dh einen Zeiger auf eine Stelle in dem Speicher, wo die Zeichenfolge „o“ gespeichert, wenn Sie, dass Sie ein Zeichen ‚o‘

Verwandte Themen