Udostępnij za pomocą


Błąd kompilatora C3068

"function" : funkcja "naked" nie może zawierać obiektów, które wymagają odwijania, jeśli wystąpił wyjątek języka C++.

Uwagi

Kompilator nie mógł wykonać odwijania stosu w funkcji naked , która zgłosiła wyjątek, ponieważ został utworzony obiekt tymczasowy w funkcji i określono obsługę wyjątków języka C++ (/EHsc).

Aby rozwiązać ten błąd, wykonaj co najmniej jedną z następujących czynności:

  • Nie kompiluj z /EHsc.

  • Nie oznaczaj funkcji jako naked.

  • Nie twórz obiektu tymczasowego w funkcji .

Jeśli funkcja tworzy obiekt tymczasowy na stosie, jeśli funkcja zgłasza wyjątek, a jeśli obsługa wyjątków języka C++ jest włączona, kompilator wyczyści stos, jeśli zostanie zgłoszony wyjątek.

Gdy zgłaszany jest wyjątek, wygenerowany kod kompilatora, nazywany prologem i epilogiem, który nie jest obecny w funkcji naked, jest wykonywany dla funkcji.

Przykład

Poniższy przykład generuje kod C3068:

// C3068.cpp
// compile with: /EHsc
// processor: x86
class A {
public:
   A(){}
   ~A(){}
};

void b(A){}

__declspec(naked) void c() {
   b(A());   // C3068
}