Portabilität an ABI-Grenzen

Verwenden Sie ausreichend tragbare Typen und Konventionen an binären Schnittstellengrenzen. Ein "portabler Typ" ist ein integrierter C-Typ oder eine Struktur, die nur integrierte C-Typen enthält. Klassentypen können nur verwendet werden, wenn Anrufer und Angerufene das Layout, die Anrufkonvention usw. zustimmen. Dies ist nur möglich, wenn beide mit denselben Compiler- und Compilereinstellungen kompiliert werden.

Wie man eine Klasse für C-Portabilität flachert

Wenn Aufrufer möglicherweise mit einem anderen Compiler/einer anderen Sprache kompiliert werden, wird eine externe "C"-API mit einer bestimmten Aufrufkonvention "flatten" :

// class widget {
//   widget();
//   ~widget();
//   double method( int, gadget& );
// };
extern "C" {        // functions using explicit "this"
   struct widget;   // opaque type (forward declaration only)
   widget* STDCALL widget_create();      // constructor creates new "this"
   void STDCALL widget_destroy(widget*); // destructor consumes "this"
   double STDCALL widget_method(widget*, int, gadget*); // method uses "this"
}

Siehe auch

Willkommen zurück bei C++
C++-Programmiersprachenreferenz
C++-Standardbibliothek