Lowlevel
Lowlevel => tyndur => Thema gestartet von: xormore am 17. June 2005, 21:30
-
Hi,
ich weiss nicht so recht wohin mit meinem anliegen. Es ist mir auch ein wenig unangenehm für jeden Futzel der mir einfällt einen neuen Thread aufzumachen... Naja, ich machs trotzdem.
Also in LOST ist mir aufgefallen, dass ihr so komische selbstgebaute Datentypen wie BYTE, WORD, DWORD, UINT, usw verwendet. Ist das nicht ein bisschen lächerlich? Beim GCC für x86 sind die eingebauten Datentypen sehr gut definiert und über Versionen hinweg gleich geblieben. Ich plädiere deswegen dafür, diese unnötigen Datentypen wieder rauszuschmeissen und stattdessen die "normalen Typen" zu verwenden. Genauso überflüssig sind BOOL, TRUE und FALSE in C++.
Vorteile:
- schönerer (einheitlicher) und übersichtlicherer Code
- verständlicher (so mancher könnte sich z.B. fragen: "wie ist WORD definiert?" es gibt genug standards, bei denen ein WORD 32 Bit groß ist.)
- keine redundanz (DWORD <-> UINT, BOOL <-> bool (sind eigentlich inkompatibel!), etc)
-
ich denke mal das ist so, damit man mit ASM kompatibel bleibt.
-
diese selbst gebastelten datentypen werden aber an den seltsamsten stellen eingesetzt, die überhaupt keine berührung mit ASM haben.
Beispiel aus videoram.h:
void SetAt (int byLine, int byCol, BYTE bySymbol, BYTE byFormat);
/* diese funktion setzt einen buchstaben auf den bildschirm über einen einfachen array zugriff */
(außerdem werden hier native datentypen mit den eigenen gemischt. sehr unschön ...)
eigentlich finde ich, sollten die asm dateien an c angepasst werden und nicht umgekehrt. es werden vielleicht einige hundert zeilen asm anfallen, da kann es nicht sein, dass sich tausende zeilen C++ code anpassen müssen und auf asm-konstrukte ausweichen müssen.
-
Stimmt ich finde die standart-datentypen auch schöner.
Teilweise auch wegen dem Syntaxhighlighting ^^
-
*zustimm*
Könnte man nicht in ASM konstanten für int und so definieren? Dann wären die Bezeichnungen auch immer gleich
-
Aber indem man Datentypennamen wie Byte oder Word benutzt, kann man sofort sehen wie breit das Datenwort ist (besonders als LowLevel / Assembler Coder), was bei hardwarenaher Programmierung schon sinnvoll ist.
-
Beim GCC für x86 sind die eingebauten Datentypen sehr gut definiert und über Versionen hinweg gleich geblieben.
Na dann viel Spass in Teufel's 64-Bit Küche bei Typen wie int. Wenn man die eingebauten Typen direkt benutzt, muss man bei verschiedenen Platformen aufpassen.
-
also die typen char, short, int und long long sind beim x86-64-gcc immer noch so groß wie beim x86. ich glaube bei long gibt es aber da unterschiede (x86: sizeof(long) = 4, x86-64: sizeof(long) = 8). dann nimmt man diesen typ einfach nicht und gut is.
diese tabelle (http://www.oreilly.de/german/freebooks/linuxdrive2ger/judas.html#JUDASC) zeigt, dass diese annahme auf vielen anderen plattformen auch gültig ist.
-
hallo,
diese Datentypen sind an die winapi angelegt, wie unschwer zu erkennen ist. Das ist bis jetzt teilweise unschön umgesetzt, das muss ich selber zugeben. Aber ich denke trotzdem, wir sollten trotzdem die jetztigen typen weiter verwenden.
BYTE ist 1 Byte groß,
WORD ist 2 Byte groß,
DWORD ist 4 Byte groß,
QWORD ist 8 Byte groß.
Das soll für das os gelten *punkt*
Die verwendung von native datentypen sollte meiner meinung nach möglichst vermieden werden. Syntax-hl hin oder her.
MfG
DDR-RAM
-
Zudem kann man Syntaxhighlightning bei allen halbwegs guten Editoren anpassen ;)
-
Ich weiß ^^
trotzdem sagen mir die standart-typen mehr zu.
Aber ich bin nicht im Kernel-Team also lass ich das eure sache sein :D
-
man kann doch die standarts trotzdem nutzen wo is das problem?
-
Es sollte schon ne Einigung innerhalb des Teams geben, denn es ist doch schon irgendwie doof, wenn in einem Teil des Codes DWORD in einem anderen int und im nächsten beides benutzt wird und niemand mehr durchsteigt (Bzw. es einfach dämlich aussieht)
-
Hi,
is doch eigentlich egal! Aber wenn bis jtz schon viel die neuen Typen benutzt worden sind, dann würd ichsagen, lassen wir sie auch drin, sons müsste mann das ja alles noch mal ändern, was ein unnötiger zeutazfwand währe! :wink:
-
Ich finde die Datentypen eh logisch, da sie nach ASM zumeist so definiert sind. Die meisten nutzen hier ja nasm und da ist word=2byte dword=4 usw.
Ich finds logischer wird anstatt short zu nutzen und kürzer qword anstelle von long long zu benutzen. Aber das ist alles Geschmackssache, irgendwie müssen ja Standards definert werden, derjenige der zuerst was festlegt bestimmt halt wos lang geht, so einfach ist das.
-
Naja, ein Wort als 16 Bit zu definieren, ist bei den heutigen Prozessoren wohl nicht mehr ganz logisch. Nicht daß ich was anderes drunter verstehen würde, aber so grundsätzlich... ;)
-
Tja... aber wenn man nicht weiß, was ein Word ist, woher soll man dann wissen, wie man seine Speichereien umschreiben muss?
Mir gefallen die Typen gut, da sie - im Gegensatz zu den Standardtypen - assemblertauglich sind und als solche gelesen werden können.
Bei int wär ich mir da nicht sicher (bei Basic sind es 16 Bit, bei C ist es eine Prozessor- bzw. Compilerentscheidung).
C ist nunmal eine Sprache, aber kein Standard. Pech gehabt... was man sich nicht definiert ist in der Versenkung verschwunden.
-
Ich benutze persönlich die typen db dw dd wie in assembler, sieht einfach besser aus, mein Syntaxhighlighting passe ich darauf auch an^^
-
ihr duerft nicht vergessen, das unsere "datentypen" nur typedefs fuer standard-typen sind. aendern sich die standard-typen aendern sich auch unsere datentypen.
-
ihr duerft nicht vergessen, das unsere "datentypen" nur typedefs fuer standard-typen sind. aendern sich die standard-typen aendern sich auch unsere datentypen.
Dafür gibts IFDEFs und sizeof..
-
Genau, und die sollten sich auf keinen Fall durch euren gesamten Code ziehen!
-
Genau, und die sollten sich auf keinen Fall durch euren gesamten Code ziehen!
Die IFs? Naja.. die müsste man eigentlich nur in eine globale Header-Datei packen..
-
Ja, eben dazu verwendet man ja die eigenen Datentypen.
-
BTW, ich mag die Begriffe wie WORD, DWORD, etc nicht. Ich benutz am liebsten u8, s16, u32 usw..
-
Dass ist aber unportabel, da man auf einem 64 Bit System keinen u32 für die Addressierung benutzen kann. Um den Code möglichst portabel zu halten sollte man dahr WORD und DWORD benutzen.
-
Zum Adressieren sollte mein eigentlich auch pointer verwenden^^ die passt der compiler ja automatisch mit an
-
Es kann aber sein, das mal mit den Addressen was anderes machen will, als nur direkt drauf zugreifen, und man kann auf Poitner keine Operationen wie >> und << benutzen.
-
Es kann aber sein, das mal mit den Addressen was anderes machen will, als nur direkt drauf zugreifen, und man kann auf Poitner keine Operationen wie >> und << benutzen.
sollte man auch nicht. selbst wenn es geht ... ;)
-
richtig pointer zu schiften halte ich für sehr dämlich
-
Aber fürs Paging wirst du doch wohl & benutzen wollen (nachdem du daraus ne Integerzahl gemacht hast).