AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language plattformabhängigen Integertypen LongInt und LongWord
Thema durchsuchen
Ansicht
Themen-Optionen

plattformabhängigen Integertypen LongInt und LongWord

Ein Thema von himitsu · begonnen am 8. Jan 2018 · letzter Beitrag vom 9. Jan 2018
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 11:58
Delphi-Version: 10 Berlin
http://docwiki.embarcadero.com/RADSt...t_und_LongWord
Zitat von LongInt und LongWord:
LongInt definiert den Integertyp mit Vorzeichen und LongWord den Integertyp ohne Vorzeichen. Die Größe der plattformabhängigen Integertypen LongInt und LongWord ist auf jeder Plattform anders, mit Ausnahme von 64-Bit-Windows; hier bleibt die Größe unverändert (32 Bit).
Ähhhh...

Seit wann sind die Plattformabhängig?
Und wenn ja, was soll der Dreck?

Erst kommen paar ganz Schlaue auf die "geniale" Idee und frieren die plattformabhängigen Typen (INT und UINT / Intager und Cardinal) ein
und nun auch noch das, aber dann nichtmal überall einheitlich, oder ist das nur ein Fehler in der Doku?

Da soll man doch nun NativeInt und NativeUInt für Platformabhängiges nehmen,
aber ich kenn jetzt keine neuen Typen für Platformunabhängiges.

FixedInt, Integer und Int32 (ich weigere mich Integer als Fixed anzusehn, das passt syntaktisch einfach sowas von garnicht)
Aber dennoch knallen nun auch alle Codes, die absichtlich mit LongInt geschrieben wurden, weil der Typ schließlich FIX war.
$2B or not $2B

Geändert von himitsu ( 8. Jan 2018 um 12:03 Uhr)
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#2

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 12:47
die ANTWORT liefern es von und für C/C++ Programmierer schon seit Urzeiten... sollen Compilerhersteller doch machen was sie wollen, man arbeite mit eigenen und stets "definierten" Typen... und das klappt auch unter Delphi, man muss nur mit ein paar #ifdefs für CompilerVersion&Plattform arbeiten

Delphi-Quellcode:
ACHAR PACHAR
WCHAR PWCHAR

INT8 PINT8 // verwende ich selbst nicht (bei NonUniCode & Microcontrolern ein 8Bit "ACHAR")
INT16 PINT16
INT32 PINT32
INT64 PINT64

UINT8 PUINT8 // verwende ich selbst nicht, ich bevorzuge hier "BYTE"
UINT16 PUINT16 // genutzt für Shared Code, wenn andere BYTE/WORD/DWORD/QWORD nicht mögen
UINT32 PUINT32 // genutzt für Shared Code, wenn andere BYTE/WORD/DWORD/QWORD nicht mögen
UINT64 PUINT64 // genutzt für Shared Code, wenn andere BYTE/WORD/DWORD/QWORD nicht mögen

BYTE PBYTE // auch wenn es außer Mode ist, ich habe und schreibe noch viel Code unter Nutzung dieser Type
WORD PWORD // gehört weiter zu meinen bevorzugten Grundtypen
DWORD PDWORD // gehört weiter zu meinen bevorzugten Grundtypen
QWORD PQWORD // verwende ich der "optischen" Einheitlichkeit wenn "WORD"&"DWORD" in Verwendung, sonst "UINT64"

Ich gebe aber zu, das ich viel "PAS" Quelltexte sehe, wo quasi nur mit "integer" oder wenn es hoch kommt nochmal mit cardinal gearbeitet wird.
Da fange ich stets zu grübeln an, wenn da mit "shl" Bits geschoben werden, wo und ob denn ein "gewollte" Typüberlauf ist als implizites Modulo bzw. AND-Maske ist.

Ich möchte das mein Quelltext sich unter allen Umständen gleich verhält. Das gelingt mit unter Nutzung "verständlicher" und 100% langzeit konstanter Grund-Typen. Und wenn wir irgendwann bei 128Bit Typen sind, dann werden das für mich zusätzliche komplett neue sein, die nichts an meinen anderen Typen ändern
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 12:55
Ich bin da kein Spezialist, aber ich verstehe das so:
  1. Ja, unter Windows war und ist "Long int" fix, egal ob 32 oder 64 Bit
  2. Plattformen wie z.B. Apple verstehen unter "long int" unter Umständen etwas anderes

Dementsprechend hätte Borland/CodeGear/Embarcadero doch alles richtig gemacht, oder?

Beispiel:
http://www.agner.org/optimize/calling_conventions.pdf (Stand 2017)
listet für "long int" meist 4 Byte, aber manche Plattformen eben auch mit 8 Byte.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 14:32
Ich möchte das mein Quelltext sich unter allen Umständen gleich verhält.
Genau darum geht es ja.

entweder ic will immer und überall fest mit einer bestimmten Menge an Bits arbeiten,
oder es soll sich z.B. an der größe des Speicherbereichs (Pointer) ausrichten.

Ein Code der eigentlich das Selbe macht, aber wo unter Windows 32 Bit und unter MacOS 64 Bit, obwohl Beides mit 64 Bit kompilert, ist doch krank und IMHO nicht wirklich nutzbar.
Es wird einem ja schon mit ARC in den Mobilen das Leben zur Hölle gemacht, weil sich sich dort Objekte nicht mit Free freigeben, selbst wenn ich das eigentlich wollte und es ist ohne IFDEFs fast nicht möglich einen platfomübergreifenden einfachen Code zu basteln.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#5

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 14:32
Ich möchte das mein Quelltext sich unter allen Umständen gleich verhält.
...weshalb du auch niemals die Delphi Version wechselst.
Dein Quelltext wird sich zwischen zwei Delphi-Versionen annähernd gleich verhalten, aber das ist keine sichere Sache, und IMHO auch keine zugesicherte Eigenschaft eines Delphi-Compilers.

Das gilt natürlich nur, wenn Du keinen Assemblercode verwendest. Aber wozu dann noch Delphi? Andererseits, mit jedem Prozessorrelease kann sich auch etwas ändern...

Dein Ziel ist also, meiner bescheidenen Meinung nach, nicht zu erreichen und rechtfertigt den Aufwand mithin nicht.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 16:11
entweder ic will immer und überall fest mit einer bestimmten Menge an Bits arbeiten,
oder es soll sich z.B. an der größe des Speicherbereichs (Pointer) ausrichten.
Und das hält EMB und auch ich für nicht sinnvoll.

Es gibt bei mir viele Fälle wo ich nicht eine bestimmten Menge an Bits benötige sondern will das es effizient läuft.
Zum Beispiel ein "for i := 0 to Container.Count do ...". Angenommen der Count ist typischerweise 5-10 groß, kann vielleicht auch mal 20 sein. Da ist es mir wurscht ob das ein 8,16,32,... ist. Da ist es mir recht dass der Compiler dann das nimmt was er für am effizientesten hält.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 16:35
Es gibt bei mir viele Fälle wo ich nicht eine bestimmten Menge an Bits benötige sondern will das es effizient läuft.
Dafür wurde doch NativeInt erfunden, als man den Integer einfror.
Ein Integer-Typ, der sich nach der Bitigkeit der CPU Registergröße/Speicheradressierung richtet.

Mir war nur grade aufgefallen, das auch der andere "Feste"-Typ nun nicht mehr fest ist.
$2B or not $2B
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 16:49
himitsu, ich stimme Dir zu. Das sind so die alltäglichen Widrigkeiten, Ärgernisse und Mehraufwendungen, die besonders verärgern, weil sie unnötig sind.

M.E. hätte man schon früher klare Typisierungen festlegen - und diese dann auch durchhalten - und weitsichtigere Entscheidungen treffen sollen.

Mir schwebt folgendes vor:

Integertyp mit und ohne Vorzeichen, plattformabhängig, erkennbar am Fehlen einer Zahl. Wobei "Byte" ja schon seit Computerur- oder zumindest -frühzeiten auf 8 Bit festgelegt ist. Diese Universaltypen wären dann am ehesten Cardinal und Integer, die ja auch mal dafür so geplant waren.

Und dann plattformunabhängige, bitanzahlkonstante Integertypen: Card16, Card32, Card64, Int16, Int32, Int64 usw.

Ist das so schwierig?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 16:55
Und dann plattformunabhängige, bitanzahlkonstante Integertypen: Card16, Card32, Card64, Int16, Int32, Int64 usw.
Meinst du sowas? (Kopiert aus System.pas):
Delphi-Quellcode:
  Int8 = ShortInt;
  Int16 = SmallInt;
  Int32 = Integer;
  IntPtr = NativeInt;
  UInt8 = Byte;
  UInt16 = Word;
  UInt32 = Cardinal;
  UIntPtr = NativeUInt;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#10

AW: plattformabhängigen Integertypen LongInt und LongWord

  Alt 8. Jan 2018, 16:59
Meinst du sowas?
Sicher.

Es kommen mit jeder Bitanzahlverdoppelung native Integertypen - und dann noch mit eigenem Namen - hinzu, sodaß es immer mehr werdne un das Chaos immer größer wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz