Sdílet prostřednictvím


Chyba kompilátoru C3068

'function' : Funkce 'naked' nemůže obsahovat objekty, které by vyžadovaly odvíjení, pokud došlo k výjimce jazyka C++.

Poznámky

Kompilátor nemohl provést uvolnění zásobníku u nahé funkce, která vyvolala výjimku, protože byl vytvořen dočasný objekt ve funkci a bylo zadáno zpracování výjimek jazyka C++ (/EHsc).

Pokud chcete tuto chybu vyřešit, proveďte alespoň jednu z následujících věcí:

  • Nekopilujte s /EHsc.

  • Neoznamujte funkci jako naked.

  • Nevytvořte ve funkci dočasný objekt.

Pokud funkce v zásobníku vytvoří dočasný objekt, pokud funkce vyvolá výjimku a pokud je povolené zpracování výjimek jazyka C++, kompilátor zásobník vyčistí, pokud dojde k vyvolání výjimky.

Při vyvolání výjimky se pro funkci spustí kompilátor vygenerovaný kód, který se nazývá prolog a epilog a který není v nahé funkci.

Příklad

Následující příklad vygeneruje C3068:

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

void b(A){}

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