Hallo, ich habe folgendes unter WinAVR programmiert: int16_t TxChar(int8_t ch) { while (!(UCSRA & 0x20)); UDR = ch; return 0; } int16_t main(void) { fdevopen(TxChar, NULL, 0); printf(...); } Beim compilieren erhalte ich folgende Warnung: "passing arg 1 of `fdevopen' from incompatible pointer type". Wenn ich nun in der Funktion TxChar den Datentyp des Arguments von "int8_t" auf "char" ändere, ist die Warnung weg. Ich dachte, "char" entspricht "int8_t" ? Übrigens erhalte ich die Warnung auch, wenn ich uint8_t als Datentyp wähle. Kann das jemand erklären ? Oder anders gefragt, was ist der Unterschied zwischen char und int8_t ? Vielen Dank. Gruß Thorsten
Nun, Du solltest Deine Funktion TxChar nach dem dokumentierten Prototypen richten, den fdevopen() verlangt -- egal, ob und wie Du annimmst, welcher andere Typ dazu identich oder kompatibel wäre. fdevopen dokumentiert, daß es einen Zeiger auf eine Funktion int func(char); übergeben bekommen möchte. Ansonten: `char' ist in der Voreinstellung des Compilers kompatibel zu `int8_t', ja. Aber erstens kann man die Voreinstellung für `char' per Compiler-Option ändern, zweitens ist kompatibel eben nicht identisch.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.