C语言模块化开发中编译调用writeLog函数出现报错问题
问题核心成因
utils.c缺失必须的标准头文件:当前文件只引入了stdlib.h、string.h,但代码里用到的FILE类型定义、fopen()/fprintf()的函数声明全部来自stdio.h。高版本的C编译器默认会将“未声明就直接调用函数”的行为升级为编译错误,而非仅输出警告,同时会因为无法识别FILE类型抛出语法类报错。- 项目没有创建
utils.h头文件:main.c代码里直接写了#include "utils.h",但实际项目里根本没有这个头文件的话,编译器会直接报“找不到对应头文件”的致命错误;就算补了空的头文件,只要内部没有声明writeLog的函数原型,还是会触发和上面一样的未声明函数调用报错。
对应修复步骤
- 给
utils.c补全头文件引入,在文件最开头加上#include <stdio.h>,把IO操作依赖的类型和函数声明补齐。 - 在项目根目录新建
utils.h头文件,写入带防重复引入守卫的函数声明:#ifndef UTILS_H #define UTILS_H // 向所有引入该头文件的源文件暴露writeLog的函数原型 int writeLog(char const *text); #endif - 重新执行编译命令
cc main.c utils.c -o myapp,即可正常完成编译生成可执行程序。
内容的提问来源于stack exchange,提问作者neves neves
相关产品推荐
相关产品推荐

