这个问题是根本原因是编译的代码中存在未声明函数,即“缺少函数原型”错误。多文件编程中比较多,导致的原因也很多,下面总结几个用于大家排查自己报错代码。
1、“头文件卫士”宏定义的失误。
有时候为了方便,一个功能函数文件*.c、*.h直接复制几份加以修改,然而这样稍不留神就会导致头文件里的“#ifndef XXXX”忘记修改,导致两份头文件的选择编译宏相同,原本用来防止重复编译的头文件卫士现在直接导致第二份代码的头文件无法被正常预处理插入代码中。
宏名较长时由于看起来比较相似,检查代码很难被发现,或者当代码较长时,由于头文件卫士在代码的最开始,也很容易被忽视。
像下面这样的代码,文件b.h宏内的代码内容将被在编译器预处理时直接忽略。
文件a.h
#ifndef __ABCDEFG_H
#define __ABCDEFG_H
...
void func_a(void);
...
#enddif // __ABCDEFG_H
文件b.h
#ifndef __ABCDEFG_H
#define __ABCDEFG_H
...
void func_b(void);
...
#enddif // __ABCDEFG_H
2、多个头文件包含引起的失误。
(很抱歉这个报错原因理解不对,因为头文件在包含时是在调用程序的开头地方,所以无论各个头文件调用顺序如何都会被提前声明,所以不是下面介绍的原因。那我遇到的那个错误原因还不是这个,当时没仔细查找