컴파일러 경고(수준 3) C4191
업데이트: 2007년 11월
오류 메시지
'operator/operation' : 'type of expression'에서 'type required'(으)로의 변환이 안전하지 않습니다.
'operator/operation' : unsafe conversion from 'type of expression' to 'type required'
함수 포인터와 관련된 몇 가지 작업은 안전하지 않은 것으로 간주됩니다.
각기 다른 호출 규칙을 사용하는 함수 형식
각기 다른 반환 규칙을 사용하는 함수 형식
각기 다른 크기, 형식 범주 또는 분류를 사용하는 인수 또는 반환 형식
길이가 다른 인수 목록(__cdecl에 대해, 짧은 목록이 varargs이더라도 긴 목록이 짧은 목록으로 캐스팅되는 경우에만)
함수의 포인터에 대해 별칭이 부여된 데이터의 포인터(void* 제외)
reinterpret_cast에 대해 경고나 오류를 발생시키는 다른 형식 차이
이 함수를 결과 포인터를 통해 호출하면 프로그램이 충돌할 수도 있습니다.
이 경고는 기본적으로 해제되어 있습니다. 자세한 내용은 기본적으로 해제되어 있는 컴파일러 경고를 참조하십시오.
다음 샘플에서는 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
};