Importowanie funkcji inline w MinGW
Używam biblioteki współdzielonej, która definiuje funkcje wbudowane w swoim nagłówku.
Oto zredukowany przypadek testowy widziany przez jednostkę kompilacyjną łączącą się z biblioteką (dla wersji widzianej przez bibliotekę, po prostu zastąpdllimport
przezdllexport
).
class __declspec(dllimport) MyClass {
public:
int myFunc2();
int myFunc1();
};
inline int MyClass::myFunc2(void) {
return myFunc1();
}
inline int MyClass::myFunc1(void) {
return 0;
}
Kompilacja daje ostrzeżenie:
warning: 'int MyClass :: myFunc1 ()' redeclared bez atrybutu dllimport po odwołaniu do dll linkage [domyślnie włączone]
Należy pamiętać, że kolejność definiowania funkcji jest ważna, jak umieszczenie definicjimyFunc1
przed definicjąmyFunc2
skutkuje brakiem ostrzeżeń.
Zauważ również, że ten kod kompiluje się bez ostrzeżeń w Visual C ++. Te ostrzeżenia są specyficzne co najmniej dla MinGW, a może ogólnie dla GCC. Edytuj: przyszło mi do głowy, że być może będę musiał sprawdzić, czy ostrzeżenie nie jest blokowane przez jedną z flag ustawionych przez projekt.
Moje pytania to:
Dlaczego to zachowanie?DeklaracjamyFunc1
tak jakinline
wewnątrz deklaracji klasy rozwiązuje problem. Dlaczego ? To także przeciwkozalecany sposób robienia rzeczy.Czy istnieje inny (lepszy?) Sposób na rozwiązanie tego problemu?