INF: Overcoming "C4071 No Function Prototype Given" Warning

ID Number: Q69898

3.00 3.10

WINDOWS

Summary:

SYMPTOMS

Code that is compiled using the Microsoft C compiler's warning

level 3 (/W3) or higher and that calls functions through FARPROC

pointers causes the C compiler to report warning C4071, "No

Function Prototype Given."

CAUSE

Pointers to functions are commonly used when an application

explicitly loads dynamic-link libraries (DLLs) through the Windows

LoadLibrary function. Function pointers declared with FARPROC do

not inherit function prototype information.

RESOLUTION

Modify the function pointers declarations to include function

prototype information.

More Information:

The following code sample uses the generic FARPROC far-pointer-to-

function data type. Compiling the code with Microsoft C at warning

level 3 or higher results in a C4071 warning:

FARPROC lpfnErrorProc;

lpfnErrorProc = GetProcAddress(hModule, MAKEINTRESOURCE(1));

(*lpfnErrorProc)(hWnd, (LPSTR)"Error Message");

However, the following code sample defines custom far-pointer-to-

function data types which provide information about the function

arguments. This code does not produce the warning:

// typedef declarations

typedef VOID FAR PASCAL FNERRORPROC(HWND, LPSTR);

typedef FNERRORPROC FAR *LPFNERRORPROC;

// variable declaration

LPFNERRORPROC lpfnErrorProc;

// variable assignment and indirect function call

lpfnErrorProc = GetProcAddress(hModule, MAKEINTRESOURCE(1));

(*lpfnErrorProc)(hWnd, (LPSTR)"Error Message");

Additional reference words: 3.00 3.10 SR# G910211-88 MICS3 R3.1