Udostępnij za pośrednictwem


Porady: migracja do /clr:safe (C++/CLI)

Języka Visual C++ można wygenerować sprawdzalne składniki za pomocą /clr:safe, co powoduje, że kompilator do generowania błędów dla każdego konstrukcja-sprawdzalne kodu.

Uwagi

Następujące problemy generować błędy możliwość weryfikacji:

  • Macierzyste typy.Nawet jeśli nie jest używany, deklarację macierzystych klas, struktury, wskaźniki i tablice uniemożliwi kompilacji.

  • Zmienne globalne

  • Wywołania funkcji do niezarządzanego library, w tym Typowe wywołania funkcji środowiska wykonawczego języka

  • Nie mogą zawierać funkcji sprawdzalne Operator static_cast do odlewania w dół.Operator static_cast Może być używany do odlewania między typów pierwotnych, ale do odlewania down, safe_cast lub cast stylu C (która jest zaimplementowany jako safe_cast) musi być używany.

  • Nie mogą zawierać funkcji sprawdzalne Operator reinterpret_cast (lub jakikolwiek odpowiednik stylu C oddanych).

  • Sprawdzalne funkcji nie można wykonać operacji arytmetycznych na interior_ptr.Tylko może przypisać do niego i odwołania do niego.

  • Funkcja sprawdzenia można tylko rzut lub złapać wskaźniki do typów odwołań, więc typów wartości musi być zapakowane przed wyrzuceniem.

  • Sprawdzalne funkcja może wywołać tylko zweryfikować funkcje (takie, że nie wolno wywołania do aparatu plików wykonywalnych języka wspólnego, obejmują AtEntry/AtExit, i tak globalnego konstruktory są niedozwolone).

  • Sprawdzalne klas nie można używać Explicit.

  • Jeśli konstruowany EXE, główną funkcją nie można zadeklarować wszystkie parametry, tak GetCommandLineArgs musi być używana do pobierania argumentów wiersza polecenia.

  • Dokonywanie-wirtualne wywołanie funkcji wirtualnych.Na przykład:

    // not_verifiable.cpp
    // compile with: /clr
    ref struct A {
       virtual void Test() {}
    };
    
    ref struct B : A {};
    
    int main() {
       B^ b1 = gcnew B;
       b1->A::Test();   // Non-virtual call to virtual function
    }
    

Następujące słowa kluczowe nie może być używane również podczas sprawdzalne kodu:

Zobacz też

Informacje

Kod czysty i weryfikowalny (C++/CLI)