Q36729: Warning C4047 ‘operator’: Different Levels of Indirection

Article: Q36729
Product(s): See article
Version(s): 5.00 5.10 | 5.10
Operating System(s): MS-DOS | OS/2
Keyword(s): ENDUSER | s_quickc s_error | mspl13_c
Last Modified: 14-NOV-1988

This information is from section D.1.3 (Page 340) of the "Microsoft
QuickC Programmer's Guide" and section E.3.3 (Page 269) of the
"Microsoft C Optimizing Compiler User's Guide" for Version 5.00 and
5.10.

This message indicates potential problems but does not hinder
compilation and linking. The number in parentheses at the end of a
warning-message description gives the minimum warning level that must
be set for the message to appear.

The following is the warning message:

C4047       'operator' : different levels of indirection

            An expression involving the specified operator had
            inconsistent levels of indirection. (1)

The following example illustrates this condition:

            char **p ;
            char  *q ;
            .
            .
            p = q ;

You will commonly get this warning if you do not cast MALLOC() to your
pointer type. The following code fragment will produce the C4047
message:
            char *string ;
            string = malloc (5) ;

To eliminate this warning message in this example, cast MALLOC() as
follows:
            string = (char *) malloc (5) ;

This is a result of the fact that MALLOC()'s default return type is
"void *".