Partilhar via


Aviso do compilador (nível 3, desativado) C4191

«Operação»: conversão insegura de «type_of_expression» para «type_required»
Fazer uma chamada de função usando o ponteiro resultante pode fazer com que o programa falhe

Observações

Várias operações envolvendo ponteiros de função são consideradas inseguras:

  • Tipos de função com diferentes convenções de chamada.

  • Tipos de função com diferentes convenções de retorno.

  • Tipos de argumento ou retorno com tamanhos, categorias de tipo ou classificações diferentes.

  • ** Diferentes comprimentos de lista de argumentos (em __cdecl, apenas na conversão de uma lista mais longa para uma lista mais curta, mesmo que a lista mais curta seja varargs).

  • Ponteiro para dados (diferente de void*) associado contra um ponteiro para função.

  • Qualquer outra diferença de tipo que gere um erro ou aviso em um reinterpret_cast.

Chamar esta função através do ponteiro de resultado pode fazer com que o seu programa falhe.

Este aviso está desativado por padrão. Para obter mais informações, consulte Avisos do compilador que estão desativados por padrão.

Example

O exemplo a seguir gera 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
}