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

标签 c clang cairo

我正在 build 来自使用 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 .

这里的类型冲突是什么?

最佳答案

当您在第 247 行使用函数 cairo_quartz_font_face_create_for_cgfont 时,它是未声明的(您应该收到警告,除非您未能使用 -Wall)。因此,编译器填充了一个假设的返回类型 int

当你最终声明函数时,它的返回类型不是int。所以这是类型冲突。

通常这种问题可以通过 #include 带有函数原型(prototype)的 header 来避免。

关于c - 为什么 Clang 认为这些类型在开罗会发生冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42910281/

相关文章:

c++ - 不能在 Qt 中使用 libclang

javascript - 在 Windows 8 计算机上安装 Cairo 和 Canvas

python - Cairo 剪辑会产生不需要的边缘

c - 删除行尾的空格

c - 为什么管道不能像变量一样被覆盖?

c++ - 链接器命令因一堆 undefined reference 而失败

mingw - 我如何建立开罗/Harfbuzz?

c - 我们如何得到以下输出?

Java 与 C(运行时)编辑 : Added Code

vim - clang_complete 和 iOS