다음을 통해 공유


컴파일러 오류 C3068

'function': C++ 예외가 발생한 경우 해제해야 하는 개체를 'naked' 함수에 포함할 수 없습니다.

함수에 임시 개체가 생성되고 C++ 예외 처리(/EHsc)가 지정되었기 때문에 컴파일러가 예외를 throw한 naked 함수에서 스택 해제를 수행할 수 없습니다.

이 오류를 해결하려면 다음 중 하나 이상을 수행합니다.

  • /EHsc를 사용하여 컴파일하지 마세요.

  • 함수를 .로 naked표시하지 마세요.

  • 함수에 임시 개체를 만들지 마세요.

함수가 스택에 임시 개체를 만드는 경우 함수가 예외를 throw하고 C++ 예외 처리를 사용하도록 설정하면 예외가 throw되면 컴파일러가 스택을 정리합니다.

예외가 throw되면 프롤로그 및 에필로그라고 하고 naked 함수에 없는 컴파일러 생성 코드가 함수에 대해 실행됩니다.

예시

다음 샘플에서는 C3068을 생성합니다.

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

void b(A){}

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