Sowohl C- als auch C++ - Standards geben nicht die genaue Länge einiger Datentypen an, sondern nur deren minimale Länge.Unterschiedliche Datentyplängen in Bibliotheken von Drittanbietern
Ich habe eine Drittanbieter-Bibliothek: someLib.lib
(für meine Plattform kompiliert) und seine entsprechende someLib.h
. Sagen wir, es enthält folgende Funktionen:
int getNumber();
void setNumber(int number);
Wenn ich ein Programm raubend dieser Bibliothek zu kompilieren, prüft der Compiler die Typen mit den definierten Signaturen im someLib.h
, so lange, wie ich int
s verwenden, sollte alles kompilieren Fein .
Aber was passiert, wenn in meinem Compiler int
ist länger oder kürzer als in dem Compiler, der verwendet wurde kompilieren someLib.lib
? Wird es beim Linken erkannt? Wird es Laufzeitfehler verursachen? Kann ich das someLib.lib
sicher benutzen, ohne zu wissen, wie es kompiliert wurde?
Das ist fast nie ein Problem mit einfachen Typen wie "int". Wo diese Art von Problem auftritt, ist mit Strukturen, die unterschiedliche Auffüllung abhängig von Compiler-Unterschiede oder sogar nur verschiedene Optionen auf dem gleichen Compiler haben; oder mit Features, die implementierungsdefinierte Details wie Bitfelder haben. Das ist ein Grund dafür, undurchsichtige Schnittstellen zu haben, die solche Details vollständig in der Bibliothek enthalten. –