Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

VIRTUAL_FUNCTION_TAB-Pragma

&pagelevel(4)&pagelevel

#pragma VIRTUAL_FUNCTION_TAB = {GLOBALLY_DEFINED | EXTERNALLY_DECLARED}

Dieses Pragma kann genutzt werden, um im Modus C++ die Generierung der Tabelle für virtuelle Funktionen (virtual function table) zu kontrollieren. Diese Tabelle wird implizit generiert, wenn eine Klasse mindestens eine virtuelle Funktion hat.

Normalerweise bestimmt der Compiler ein Modul, welches die Definition der Tabelle enthält, in anderen Modulen wird dann nur ein Externverweis generiert. Dafür wird geprüft, ob die Klasse eine virtuelle Funktion hat, die weder inline noch eine reine virtuelle Funktion ist. Es wird dann das Modul genommen, in dem die erste dieser Funktionen definiert ist.

Es gibt jedoch Klassen, für die diese Heuristik fehlschlägt. Für diese Klassen wirkt dieses Pragma:

  • Wird das Pragma nicht angegeben, wird die Tabelle als static-Variable angelegt.
  • Wird GLOBALLY-DEFINED angegeben, so wird die Tabelle in diesem Modul als externe Variable definiert.
  • Wird EXTERNALLY-DECLARED angegeben, so wird nur ein Extern-Verweis auf die Tabelle generiert. Sie muss dann in einem anderen Modul definiert sein.