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里面是写入函数的声明或者结构体的定义之类的,而不应该是具体的函数实现。