简体   繁体   中英

Why is the usage of printf wrong in this program?

I saw this sample code in an answer to How do function pointers in C work?

#import <stdlib.h>
#define MAX_COLORS  256

typedef struct {
    char* name;
    int red;
    int green;
    int blue;
} Color;

Color Colors[MAX_COLORS];


void eachColor (void (*fp)(Color *c)) {
    int i;
    for (i=0; i<MAX_COLORS; i++)
        (*fp)(&Colors[i]);
}

void printColor(Color* c) {
    if (c->name)
        printf("%s = %i,%i,%i\n", c->name, c->red, c->green, c->blue);
}

int main() {
    Colors[0].name="red";
    Colors[0].red=255;
    Colors[1].name="blue";
    Colors[1].blue=255;
    Colors[2].name="black";

    eachColor(printColor);
}

The code returns the following error:

test.c: In function ‘printColor’:
test.c:21: warning: incompatible implicit declaration of built-in function ‘printf’

printf位于stdio.h ,而不是stdlib.h

Just to add to what others have said, if the C compiler comes across a function for which it has not seen a prototype it will make an assumption about the signature of that function that is generally going to be wrong.

Including stdio.h includes a prototype of the function so that the compiler does not have to guess at its signature.

添加包含stdio.h:

#include <stdio.h>

you have included stdlib.h instead of stdio.h. It stdio.h where printf is defined not stdlib.h. So if you chnage, the warning may be resolved.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM