Autor |
Beitrag |
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 22.08.17 22:48
- Nachträglich durch die Entwickler-Ecke gelöscht -
Zuletzt bearbeitet von Frühlingsrolle am Fr 25.08.17 18:21, insgesamt 3-mal bearbeitet
|
|
Ralf Jansen
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 22.08.17 23:15
Unter 32 bit ist long = int. Bei 64bit Systemen kommt es auf OS/Compiler/Compilereinstellungen an.
Unter Windows und einem Microsoft Compiler ist auch bei 64bit OS long = int = 32bit. Unter *nix OS'en ist long eher gleich long long also 64bit.
Alles was du gefunden hast ist im richtigen Kontext vermutlich richtig.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 22.08.17 23:34
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Th69
Beiträge: 4764
Erhaltene Danke: 1052
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mi 23.08.17 09:08
Die Tabelle listet nur auf, was man in C oder C++ angeben kann, um einen bestimmten Datentyp zu definieren, d.h.
C 1: 2: 3: 4:
| signed long int a; signed long b; long int c; long d; |
definieren alle einen "long int" (es gibt auch noch den Datentyp "long double", d.h. "long" ist sprachtechnisch gesehen nur ein "qualifier" (zusätzliches Kennzeichen)).
Hinzu kommt, daß der C und C++ Sprachstandard jeweils nur Mindestgrößen für die Datentypen vorgibt:
Quelltext 1: 2: 3: 4:
| short >= 16 bit (2 Byte) int >= 16 bit (2 Byte) long >= 32 bit (4 Byte) long long >= 64 bit (8 Byte) |
Jeder Compilerhersteller definiert dann für sich die entsprechenden Datengrößen (welche möglichst passend zum Prozessor sind, um möglichst effizienten Code zu erzeugen).
Und bei dem Code der Library wird eben anhand des Makros __x86_64__ festgelegt, wie die beiden Aliasnamen uint32 und int32 definiert sind (d.h. auf welchen konkreten Datentypen diese beruhen).
Wenn du also eine DLL in Delphi ansprechen willst, dann mußt du genau wissen, mit welchem Compiler (und dessen Einstellung x86 oder x64) diese kompiliert wurde.
Bei deiner Library kannst du also wegen der Namen davon ausgehen, daß die beiden Datentypen einen 32-Bit Integer verwenden (egal ob für x86 oder x64 kompiliert).
PS: "C/C++" gibt es nicht
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 23.08.17 10:02
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Tastaro
Beiträge: 414
Erhaltene Danke: 23
|
Verfasst: Mi 23.08.17 11:04
Da fällt mir immer diese uralte Frage ein:
Was ist der Unterschied zwischen einem Pascal- und einem C-Programmierer?
Der Pascal-Programmierer weiß wie lang seine Datentypen sind.
Für diesen Beitrag haben gedankt: hydemarie
|
|
Symbroson
Beiträge: 382
Erhaltene Danke: 67
Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
|
Verfasst: So 08.10.17 21:29
Tastaro hat folgendes geschrieben : | Da fällt mir immer diese uralte Frage ein:
Was ist der Unterschied zwischen einem Pascal- und einem C-Programmierer?
Der Pascal-Programmierer weiß wie lang seine Datentypen sind. |
Dem muss ich wiedersprechen.
speziell für integer kannst du stdint.h importieren - da weiß man nachher immer wie groß die sind - egal auf welcher Plattform. Im zweifelsfall sizeof(type) ausgeben.
Und ich bezweifle sehr stark dass pascal Programmiere im Schnitt die Datentypengröße besser kennen als c bzw. c++ programmierer.
bei Java kann ich mir das vorstellen, aber das kann und will ich vorerst nicht verstehen, geschweigedenn lernen.
Bin halt ein typischer Linux-Fan :p
LG
_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
|
|
OlafSt
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: Mo 09.10.17 00:05
Och, in Pascal ist das ziemlich streng formuliert.
ShortInt = 8 Bit Signed, int8 als Alias
Byte = 8 Bit unsigned, UInt8 als Alias
SmallInt = 16 Bit signed, Int16 als Alias
Word = 16 Bit Unsigned, UInt16 als Alias
Integer = 32 Bit signed, Int32 oder auch LongInt als Alias
Cardinal = 32 Bit unsigned, UInt32 oder auch LongWord als Alias
int64 = 64 Bit signed
UInt64 = 64Bit unsigned
Es gibt aber einen Typen, bei dem es vom System abhängt: NativeInt bzw. NativeUInt. Der ist 32bittig unter 32bit-Systemen und 64bittig unter 64-Bit-Systemen.
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
Symbroson
Beiträge: 382
Erhaltene Danke: 67
Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
|
Verfasst: Mo 09.10.17 03:43
in c ist es ähnlich:
char: 1B
short: 2B
int: 4B | (16bit)2B
long: 4B
long long: 8B
float: 4B
double: 8B
long double: 10B
pointer: 4B
mit stdint.h tragen die Typen ihre Größe im Namen und sind Plattformunabhängig
intx_t / uintx_t wobei x=8,16,32,64
[Edit] also ich hab jetzt doch nochmal nachgeschaut und folgenden Thread gefunden, der deine Aussage leider bestätigt : stackoverflow.com/qu...int-in-c-programming
Absr wie gesagt - zur Not sizeof(type) - dann kann einen nichts überraschen oder fleich stdint.h
_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 10.10.17 08:17
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
OlafSt
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: Di 10.10.17 09:12
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| type {$IFDEF WIN32} NativeInt = integer; NativeUInt = Cardinal; {$ELSE} NativeInt = int64; NativeUInt = UInt64; {$ENDIF} |
So ungefähr.
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
hydemarie
Beiträge: 480
Erhaltene Danke: 51
|
Verfasst: Di 10.10.17 10:55
Symbroson hat folgendes geschrieben : | in c ist es ähnlich:
char: 1B |
Wobei du natürlich, wenn du schon Plattformunabhängigkeit als Vorteil von irgendwas nennst, daran denken solltest, dass du außer stdint.h auch limits.h einbindest und mit CHAR_BIT statt mit "Byte" (denn das ist keine Konstante) rechnest...
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 11.10.17 15:46
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|