Der Typ UInt32
existierte bereits vor der Unterstützung von 64-Bit. Historisch gesehen wurde es als unsigned long
definiert. Es hätte auch unsigned int
sein können. Ich weiß nicht, warum damals long
anstelle von int
gewählt wurde. Die Wahl wäre größtenteils willkürlich gewesen.
Nachdem diese Wahl getroffen wurde, kann sie jedoch nicht geändert werden, obwohl unsigned int
sowohl für 32- als auch für 64-Bit funktionieren würde.
Das große Problem, das sich ergeben würde, wenn es geändert würde, wäre C++. In C++ sind die Typen von Argumenten in die Symbolnamen in den Objektdateien und Bibliotheken eingebettet. long
und int
sind verschiedene Typen, daher sind void foo(long);
und void foo(int);
separate Funktionen mit separaten Symbolnamen. Wenn sich UInt32
in 32-Bit ändern würde, könnten Sie nicht mehr gegen Bibliotheken verlinken, die mit der alten Definition erstellt wurden. Wenn die Bibliotheken mit der neuen Definition neu erstellt würden, könnte der alte kompilierte Code sie nicht laden.