【问题标题】:C error conflicting typesC 错误冲突类型
【发布时间】:2010-03-24 05:23:36
【问题描述】:

我有以下错误

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>

但是对于日光,我们写成

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

【问题讨论】:

    标签: c


    【解决方案1】:

    您应该只包含<stdio.h> 而不是自己声明函数。 (如果您不是尝试从标准库中声明众所周知的sprintf 函数,而是一些自定义函数,您应该为您的函数选择不同的名称)。

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

    【讨论】:

      【解决方案2】:

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

      (而且,如果您坚持自己声明它们,至少要正确输入类型...)

      【讨论】:

        【解决方案3】:

        除非您告诉编译器忽略标准包含(和系统 C 库),否则您可能只想包含标准头文件,即如 David Gelhar(第一个回答)所说。

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

        您可能会喜欢阅读 extern 的目的。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 是的,类似的 9f 部分手册页是针对在内核本身中定义的函数,而不是在程序可以链接的用户空间库中。
          猜你喜欢
          • 2014-03-10
          • 2013-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-07
          • 2013-03-25
          • 2023-03-31
          • 2012-10-04
          相关资源
          最近更新 更多