多文件编译中避免多次include同一个文件

本文详细介绍了在C语言编程中如何避免函数重定义问题,通过Header文件正确声明函数,以及详细解释了Header和Source文件之间的区别和作用。同时提供了解决Header文件中函数重定义的方法,并通过实例演示了正确的Header文件和Source文件结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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”就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值