为什么Clang认为这些类型在开罗发生冲突?

时间:2017-03-20 17:34:09

标签: c clang cairo

我正在使用Clang从源代码构建。我收到以下错误:

src/cairo-quartz-font.c:368:1: error: conflicting types for 'cairo_quartz_font_face_create_for_cgfont'
cairo_quartz_font_face_create_for_cgfont (CGFontRef font)
^

src/cairo-quartz-font.c:247:18: note: previous implicit declaration is here
*font_face = cairo_quartz_font_face_create_for_cgfont (cgFont);

但是,从源头看,我发现了这些定义:

247:

CGFontRef cgFont = NULL;
// ... 
*font_face = cairo_quartz_font_face_create_for_cgfont (cgFont);
CGFontRelease (cgFont);

368:

cairo_font_face_t *
cairo_quartz_font_face_create_for_cgfont (CGFontRef font)
{
    cairo_quartz_font_face_t *font_face;
    // ...

完整的来源是mirrored here

这里有什么类型的冲突?

1 个答案:

答案 0 :(得分:2)

当你在第247行使用函数cairo_quartz_font_face_create_for_cgfont时,它是未声明的(除非你没有使用-Wall,否则你应该收到警告)。因此,编译器填充假定的返回类型int

当您最终声明该函数时,其返回类型不是int。这是一种类型冲突。

通常#include带有函数原型的标题可以避免这种问题。