Autor Beitrag
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

Zitat:
Was stimmt nun?


Alles was du gefunden hast ist im richtigen Kontext vermutlich richtig.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 22.08.17 23:34 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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.
ausblenden 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:
ausblenden 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



BeitragVerfasst: Mi 23.08.17 10:02 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Tastaro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: So 08.10.17 21:29 
user profile iconTastaro hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: 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 :roll: : 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



BeitragVerfasst: Di 10.10.17 08:17 
- Nachträglich durch die Entwickler-Ecke gelöscht -
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Di 10.10.17 09:12 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Di 10.10.17 10:55 
user profile iconSymbroson hat folgendes geschrieben Zum zitierten Posting springen:
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



BeitragVerfasst: Mi 11.10.17 15:46 
- Nachträglich durch die Entwickler-Ecke gelöscht -