'작업': 'type_of_expression'에서 'type_required'로의 변환이 안전하지 않음
결과 포인터를 사용하여 함수를 호출하면 프로그램이 실패할 수 있습니다.
비고
함수 포인터와 관련된 다음 몇 가지 작업이 안전하지 않은 것으로 간주됩니다.
여러 호출 규칙을 사용하는 함수 형식
여러 반환 규칙을 사용하는 함수 형식
여러 크기, 형식 범주 또는 분류를 사용하는 인수 또는 반환 형식
서로 다른 인수 목록 길이(
__cdecl에서 짧은 목록이 varargs인 경우에도 긴 목록에서 짧은 목록으로 캐스트할 때만).함수에 대한 포인터에 대해 별칭이 지정된 데이터(
void*제외)에 대한 포인터입니다.reinterpret_cast에 오류 또는 경고를 생성하는 다른 형식 차이
결과 포인터를 통해 이 함수를 호출하면 프로그램에서 충돌이 발생할 수 있습니다.
기본적으로 이 경고는 해제되어 있습니다. 자세한 내용은 Compiler Warnings That Are Off by Default을 참조하세요.
Example
다음 예제에서는 C4191을 생성합니다.
// C4191.cpp
// compile with: /W3 /clr
#pragma warning(default: 4191)
void __clrcall f1() { }
void __cdecl f2() { }
typedef void (__clrcall * fnptr1)();
typedef void (__cdecl * fnptr2)();
int main() {
fnptr1 fp1 = static_cast<fnptr1>(&f1);
fnptr2 fp2 = (fnptr2) &f2;
fnptr1 fp3 = (fnptr1) &f2; // C4191
fnptr2 fp4 = (fnptr2) &f1; // C4191
}