我使用的是一个makefile,当它只有main.c和data.h时才有用,但是一旦我向data.h添加了一个函数头,并且该函数的文件实际定义了函数它在编译时开始出错。
我有:
/* main.c */
#include "data.h"
int main () { /* this is empty */ }
和
/* data.h */
char foo(char);
和
/* foo.c */
#include "data.h"
char foo(char){
...
}
我得到的错误是conflicting types for 'foo'
和note: previous declaration of 'foo'
。
其他有这个问题的人试图在声明之前使用某个函数或者其他类似的东西,但我似乎无法在这个例子中找到它。
答案 0 :(得分:1)
错误消息听起来像foo
中data.h
的签名与foo.c
e.g。
char foo(char);
和
char foo(char*);
或
// missing return type may produce a different/additional warning/error, depending on the compiler
foo(char);
检查冲突声明的具体位置并进行比较。
答案 1 :(得分:-1)
您在头文件中忘记了包含警戒。它包含在两个C文件中,因此您可以获得相同的两个函数声明。更改您的头文件,如此。
#ifndef DATA_H
#define DATA_H
char foo(char);
#endif