다음을 통해 공유


컴파일러 경고(수준 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
};