C错误类型冲突

时间:2010-03-24 05:23:36

标签: c

我有以下错误

error : conflicting types for 'sprintf'
error : conflicting types for 'vsprintf'
error : conflicting types for 'vprintf'
error : conflicting types for 'select'

在我的头文件中,代码是

extern char *sprintf(char*,const char*,... )

实际上我包括#include <stdio.h>

但对于solaries,我们写为

# ifndef HPUX
extern char *sprintf(char*,const char*,... )

4 个答案:

答案 0 :(得分:5)

您应该只包含<stdio.h>,而不是自己声明这些功能。 (如果您不是要尝试从标准库中声明众所周知的sprintf函数,而是使用某个自定义函数,则应为函数选择其他名称。

您的声明会导致类型冲突,因为同名的标准库函数返回ìnt,而不是char*

答案 1 :(得分:3)

不要手动声明标准功能,只需包含<stdio.h>

(并且,如果你坚持自己宣布这些,至少得到正确的类型......)

答案 2 :(得分:1)

除非您告诉编译器忽略标准包含(以及系统C库),否则您可能只想包含标准标题,即David Gelhar(第一个要回答的)表示。

如果您正在使用其他一些C库,您仍然会包含标准标头,但是通过将不同的包含路径传递给编译器。

您可能会喜欢阅读extern要完成的内容。

答案 3 :(得分:0)

根据this Solaris man page (for Solaris DDI)<sys/ddi.h>sprintf定义为返回char *。看来该函数的定义仅用于设备驱动程序开发。如果您没有实现设备驱动程序,请改为使用标准C版本(返回int),包括<stdio.h>,并且不要在标题或源代码中的任何位置再次声明它。