我在回答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);
}
代码返回以下错误:
test.c: In function ‘printColor’:
test.c:21: warning: incompatible implicit declaration of built-in function ‘printf’
答案 0 :(得分:5)
printf
位于stdio.h
,而不是stdlib.h
。
答案 1 :(得分:3)
只是为了添加其他人所说的内容,如果C编译器遇到了没有看到原型的函数,它会假设该函数的签名通常会发生是错的。
包括stdio.h包含函数的原型,以便编译器不必猜测它的签名。
答案 2 :(得分:2)
添加stdio.h的包含:
#include <stdio.h>
答案 3 :(得分:1)
你已经包含了stdlib.h而不是stdio.h。它是stdio.h,其中printf的定义不是stdlib.h。因此,如果您使用,可以解决警告。