2009-10-20 30 views
8

Ich frage mich, warum ich ein Beispiel aus Buch nicht kompilieren kann. Ich vereinfache das Beispiel hier, um zu vermeiden, ein Beispiel aus einem urheberrechtlich geschützten Buch zu veröffentlichen.Unterschied zwischen Byte und Char in C

#include <stdio.h> 

BYTE *data = "data"; 

int main() 
{ 
    printf("%s", data); 
    return 0; 
} 

Bei der Kompilierung mit g ++, i Fehlermeldung erhalten,

error: invalid conversion from 'const char*' to 'BYTE*' 

Das Programm funktioniert durch einfaches BYTE mit char ersetzen, aber ich muß etwas falsch tun, da das Beispiel aus einem Buch kommt.

Bitte helfen Sie, das Problem aufzuzeigen. Vielen Dank.

+1

Die Frage ist mit "C" markiert, aber Sie sagen, dass Sie 'g ++' verwenden, was ein 'C++' Compiler ist. Welche Sprache verwendest du? –

+0

ja, C oder C++? – Raptor

+2

Ich benutze den C-Teil von C++. Ist C++ rückwärtskompatibel mit C, wenn ich also nur den C-Teil verwende, ist es egal, ob es g ++ oder gcc ist. – idazuwaika

Antwort

27

BYTE ist kein Teil der C-Sprache oder C-Standard-Bibliothek, so dass es vollständig systemabhängig davon ist, ob es definiert wird, nachdem nur die Standard-Header-Datei stdio.h enthalten ist.

Auf vielen Systemen, die ein BYTE Makro definieren, ist es oft ein unsigned char. Die Konvertierung von einer zu einer unsigned char* würde eine explizite Umwandlung erfordern.

+0

Yep - da ist Ihre Antwort idazwaika - benutzerdefinierte Datentypen Definitionen können Probleme verursachen. – ChrisBD

+0

Sie können auch beachten, dass der C-Standard es dem Compiler ermöglicht, char entweder als vorzeichenbehaftetes Zeichen oder als vorzeichenloses Zeichen zu verwenden, was zu einigen unerwarteten Ergebnissen führen kann. –

+0

Danke. Sieht so aus, als müsste ich nach der Definition von BYTE-Makro suchen. Gibt es eine Möglichkeit, die Ausgabe von C-Pre-Prozessor, wo Makros sind bereits übersetzt? – idazuwaika

Verwandte Themen