我正在用mupdf库中某些函数的自定义版本编译mupdf。有两个函数似乎互相调用,因此当我创建它们的_custom版本时,在编译时会发出错误。

pc@pc:~/sviluppo/mupdf-0.9$ make
CC build/debug/obj_print.o
fitz/obj_print.c: In function ‘fmt_array_custom’:
fitz/obj_print.c:191:4: warning: implicit declaration of function ‘fmt_obj_custom’
fitz/obj_print.c: At top level:
fitz/obj_print.c:304:13: warning: conflicting types for ‘fmt_obj_custom’
fitz/obj_print.c:304:13: error: static declaration of ‘fmt_obj_custom’ follows non-static declaration
fitz/obj_print.c:191:4: note: previous implicit declaration of ‘fmt_obj_custom’ was here
make: *** [build/debug/obj_print.o] Errore 1

怎么了?函数的默认版本已经以相同的方式相互调用。

最佳答案

在第191行中,函数fmt_array_custom在没有事先声明的情况下被调用。所以编译器隐式地假设声明(non-static)。
稍后在第304行中,它看到实际的函数声明/定义,即static。这是一场冲突。
若要修复此问题,可以在第191行之前添加声明。只需从第304行复制函数proto type(不带body)。

关于c - 隐式声明静态的麻烦(编译自定义mupdf库),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7498190/

10-14 04:29