Compiler Warning (level 1) C4190

'identifier1' has C-linkage specified, but returns UDT 'identifier2' which is incompatible with C

A function or pointer to function has a UDT (user-defined type, which is a class, structure, enum, or union) as return type and extern "C" linkage. This is legal if:

  • All calls to this function occur from C++.

  • The definition of the function is in C++.

Example

// C4190.cpp  
// compile with: /W1 /LD  
struct X  
{  
   int i;  
   X ();  
   virtual ~X ();  
};  

extern "C" X func ();   // C4190