![]() |
ENGLISH VERSION |
|
![]() |
Links | | | Forum | | | Kommentare | | | News melden |
![]() |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
![]() |
amiga-news.de Forum > Programmierung > Typfrage | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
21.06.2006, 22:38 Uhr Reth Posts: 1858 Nutzer |
Hallo zusammen, wie bekomm ich denn den Datentyp für so Flags wie MENUENABLED raus (ist mit 0x0001 definiert)? Ist das unsigned int? Ciao [ - Antworten - Zitieren - Direktlink - ] |
21.06.2006, 23:28 Uhr whose Posts: 2156 Nutzer |
@Reth: Öhm... nicht erschlagen, falls das jetzt Unsinn sein sollte (habe mir da nie wirklich Gedanken drüber gemacht), aber sind die Flags per se nicht typlos? Es sind ja nur #define s... Grüße -- --- ![]() ![]() [ - Antworten - Zitieren - Direktlink - ] |
22.06.2006, 08:07 Uhr Reth Posts: 1858 Nutzer |
@whose: Ja sie sind typlos definiert (#defines), aber bin ja auch dümmlich, hätt nur z.B. in der struct NewMenu nachsehen müssen, dort werden sie als UWORD angegeben! [ - Antworten - Zitieren - Direktlink - ] |
22.06.2006, 09:32 Uhr Solar Posts: 3680 Nutzer |
Nein, #define's sind nicht typenlos, zumindest nicht in dem Moment in dem sie vom Präprozessor in den Quellcode eingefügt werden. In dem Moment sind das Integer-Literale, somit vom Typ int sofern nicht anders angegeben. Wenn Sourcen den Typ als ULONG angeben, ist das eine implizite Typumwandlung. #define 42 -> int #define 42u -> unsigned int #define 42l -> long #define 42ul -> unsigned long [ Dieser Beitrag wurde von Solar am 23.06.2006 um 10:14 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.06.2006, 09:43 Uhr Reth Posts: 1858 Nutzer |
@Solar: Dann wird in der Amiga API wohl an der Stelle implizit gewandelt, da MENUENABLED ja als 0x0001 definiert ist und in struct NewMenu UWORD (unsigned short?) steht. [ - Antworten - Zitieren - Direktlink - ] |
22.06.2006, 10:38 Uhr Solar Posts: 3680 Nutzer |
Ja. In der Regel ja auch gar kein Problem. [ - Antworten - Zitieren - Direktlink - ] |
22.06.2006, 10:50 Uhr whose Posts: 2156 Nutzer |
Zitat: *patsch* ja klar... es kommt ja darauf an, was der Compiler später sieht. Hätte ich mit etwas nachdenken auch selbst drauf kommen können. Danke ![]() Grüße -- --- ![]() ![]() [ - Antworten - Zitieren - Direktlink - ] |
22.06.2006, 11:37 Uhr Solar Posts: 3680 Nutzer |
Hab' sicherheitshalber noch einmal nachgeschaut; die Sache ist etwas komplizierter... Ein Integer-Literal (also eines ohne "u" oder "l" dahinter) hat den "kleinstmöglichen" Typ, in dem sein Wert dargestellt werden kann. D.h. der Compiler klappert eine Typliste ab und guckt, ob der Wert des Literals in den Typ reinpaßt. Geschickterweise unterscheiden sich die Typlisten für dezimale Literale (z.B. 42) von denen für oktale / hexadezimale Literale (z.B. 0x0001): int -> long int -> long long int für Dezimale, int -> unsigned int -> long int -> unsigned long int -> long long int -> unsigned long long int für Hexadezimale. Somit ist der Typ von 0x0001 abhängig von der Breite eines int - bei 32bit signed, bei 16bit unsigned... Wie ich den C-Standard liebe. Immer wieder für Überraschungen gut. ![]() [ Dieser Beitrag wurde von Solar am 23.06.2006 um 10:15 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
22.06.2006, 13:32 Uhr Holger Posts: 8116 Nutzer |
Was aber hier zum Glück nicht so eine große Rolle spielt, weil ja die Frage falsch gestellt war. Letztendlich ging es nicht um den Typ der Flagkonstante, sondern den des Flags - dem Struktureintrag. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
22.06.2006, 13:44 Uhr bubblebobble Posts: 707 Nutzer |
Also die Notation 0x0001 schreit ja schon nach 16bit. sonst hätte man auc 0x1 oder 0x00000001 schreiben können. Da es sich um Flag handelt, macht unsigned etwas mehr Sinn als signed, aber ist letztendlich egal, weil damit ja nicht gerechnet wird, sondern nur Bitweise and/or. -- Thilo Köhler, Author von: HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
22.06.2006, 14:19 Uhr Solar Posts: 3680 Nutzer |
Zitat: Ist natürlich völliger Quark, weil die führenden Nullen überhaupt nix aussagen... ![]() Also ist das Literal signed, punktum. [ - Antworten - Zitieren - Direktlink - ] |
22.06.2006, 14:59 Uhr Reth Posts: 1858 Nutzer |
@Holger: Ja nachdem dieser letztendlich den Wert empfängt. Der Typ der Konstante ist trotzdem interessant gewesen (jetzt mal so für mich). Aber das wird dann wohl compilerabhängig vergeben, je nachdem wie der C-Standard da umgesetzt wurde (danke solar, werd mich wohl nie so tief da reingraben!). [ - Antworten - Zitieren - Direktlink - ] |
22.06.2006, 15:02 Uhr Solar Posts: 3680 Nutzer |
Zitat: Bleibt mir nix anderes übrig - mein aktuelles Programmierprojekt ist eine C-Standardbibliothek. :-D [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Typfrage | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
![]() |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2025 by amiga-news.de - alle Rechte vorbehalten. |
![]() |