컴파일러 오류 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
};