|
Bei extern-inline Funktionen und inline Variablen gibt es in der Source keinen Hinweis, welchem Modul diese Symbole zugeordnet werden sollen. Der Compiler wählt dann ein Modul aus. Mit diesem Pragma kann der Programmierer das Modul selbst bestimmen.
Der externe Entry für das betroffene Symbol wird in diesem Modul angelegt. Bei extern-inline Funktionen wird der Entry benötigt, wenn die Adresse genommen wird oder der Optimierer die Funktion nicht inline expandiert.
Bei inline Variablen wird in diesem Modul der Speicher für die Variable angelegt.
Folgende Argumente können mit den Pragmas angegeben werden:
Argument | Beispiele |
Name einer Funktion |
|
Name einer Elementfunktion |
|
Name einer Variablen |
|
Name eines statischen Datenelements |
|
Deklaration einer Funktion |
|
Deklaration einer Elementfunktion |
|
Deklaration einer Variablen |
|
Deklaration eines statischen Datenelements |
|
Spezifikation einer Klasse |
|
Wenn als Argument eine Klasse angegeben wird, so hat dies die gleiche Wirkung, als wenn das Pragma für jede Elementfunktion und für jedes statische Datenelement dieser Klasse angegeben worden wäre.
Wenn als Pragma-Argument der Name einer Funktion oder Elementfunktion (z.B. A::f
) angegeben wird, darf es sich um keine überladene Funktion handeln. Bei überladenen Funktionen oder Elementfunktionen muss die vollständige Funktions-Deklaration angegeben werden, z.B. #pragma instantiate_inline char * A::f(int, char *).
Als Argumente sind Compiler-generierte Funktionen und reine virtuelle Funktionen generell unzulässig.
Das Argument darf kein Template sein. Für Templates kann die explizite Instanziierung oder das #pragma instantiate
genutzt werden.
Dieses Pragma ist in C/C++ ab Version 4.0A20 verfügbar.