假设我有一个非常小的头文件:
#ifndef A_H_
#define A_H_
void print();
int getInt()
{ //ERROR HERE
return 5;
}
#endif /* A_H_ */
实现打印的源文件如下:
#include "a.h"
void print()
{
printf("%d\n",getInt()); //WARNING HERE
}
我的main()函数代码:
#include <stdio.h>
#include <stdlib.h>
#include "a.h"
int main(void)
{
print();
return EXIT_SUCCESS;
}
请注意,getInt
在头文件中定义并在源文件中调用。
当我编译时,我在头文件中得到multiple definition of
getInt'`,但我只是
定义一次!源文件(.c)仅调用它。我的问题是什么?
感谢
答案 0 :(得分:1)
您可能也将头文件包含在另一个源文件中。您可以尝试将定义移至.c文件或将getInt()
声明为inline
。
答案 1 :(得分:1)
你应该将getInt()
移到a.c,即
A.H:
#ifndef A_H_
#define A_H_
void print(void);
int getInt(void);
#endif /* A_H_ */
交流转换器:
#include <stdio.h>
#include "a.h"
void print(void)
{
printf("%d\n",getInt());
}
int getInt(void)
{
return 5;
}
main.c中:
#include <stdio.h>
#include <stdlib.h>
#include "a.h"
int main(void)
{
print();
return EXIT_SUCCESS;
}
根据经验,接口(即 prototypes 用于外部可访问的函数,加上相关的typedef和常量等)属于.h文件,而实现(即实际的函数定义,以及私有(静态)函数和其他内部函数)属于.c文件。