file 1
以下是header file——pr_exit.h
#ifndef _PR_EXIT_H
#define _PR_EXIT_H
include<pr_exit.c>
void pr_exit(int status);
#endif
file2
以下是c source file——pr_exit.c
#include"sys/wait.h"
void pr_exit(int status)
{
//具体的pr_exit函数实现
}
file3
main函数
#include"pr_exit.h"
#include"myerr.h"
int main
{
//具体的程序代码
}
这里就有典型的重定义问题
问题在于file2里面include了file3,而include3里面有了void pr_exit(int status); 此时file2和file3就有两个void pr_exit(int status);
#include发生在预编译时期,此时file2和file3合并起来,同一个文件内不允许两次定义同一个函数(即不能出现重定义)
去掉file2的include<pr_exit.c>重新编译source file,即可通过编译,排除由include引起的重定义问题。
headerfile里面是写入函数的声明或者结构体的定义之类的,而不应该是具体的函数实现。
解决方案:
source.h
#ifndef _SOURCE_H
#define _SOURCE_H 1
extern returned_varible_type function(parameter list);
#endif
source.c
returned_varible_type function(parameter list);
{
具体的函数实现
}
使用function只要include“source.h”就可以了