C 语言中多文件编译的问题

转自百度知道

我的工程里头有两个文件,main.c fun.c 一个头文件tou.h
mian.c和fun.c中都用到了tou.h中声明的函数

请问,我是不是该这样做:
在main.c中#include <tou.h>
在fun.c中同样#include <tou.h>(好像是必需的,请详细解释)

(我的观点,如果这两步都是必需的 那么当有很多个比如10个.c程序每个里头都要#include <tou.h> 那么文件是不是会特别大,当有100个.c程序都要包含一下的话,那么不是非常重复么?)

如果这两步都是必需的,第二个问题,这样会不会引起头文件多次被包含的问题?怎么解决。
解释的过程中请说一下头文件被多次包含是什么情况引起的。

第三个问题:
当我在main.c中这样
#define unchar unsigned char

那么当我在fun.c中还需要重新创建替换宏unchar吗 可以不在创建而直接使用吗?

以上三个问题,请大虾详细解释一下。非常感谢!
如果我定义的头文件是 tou.h
那么根据你们说的那个解决多次包含的方法
我是应该这样写
#ifndef  tou.h
#define  tou.h
还是这样写
#ifndef _tou_h
#define _tou_h
还是这样写
#ifndef _tou.h_
#define _tou.h_
*******************************************************************************************
第一个问题
请问,我是不是该这样做: 
在main.c中#include <tou.h> 
在fun.c中同样#include <tou.h>(好像是必需的,请详细解释) 
这是必需的。因为编译器只是把包含文件的代码复制过来,既然你二个文件中都用到头文件的内容,那当然要包含头文件,否则就会出错。
我的观点,如果这两步都是必需的 那么当有很多个比如10个.c程序每个里头都要#include <tou.h> 那么文件是不是会特别大,当有100个.c程序都要包含一下的话,那么不是非常重复么?) 那当然是会重复的。不过这个对程序的运行效率没任何影响,只是在编译过程中对文件的分析时间会稍长些,这也是没有办法的事,全看代码编写者如何组织结构了。
第二个问题:
会的。解决的方法就是在可能被多次包含的头文件中开头加上#pragma once,那样就可以保证此头文件代码只被执行一次,而不会造成头文件中函数多次重复定义至于引起这种情况的情况。当然你也可以自己用#ifdef等预编译处理来解决。你问的问题不就是这种情况么?main.c和fun.c中都包含头文件tou.h

第三个问题: 
当我在main.c中这样 
#define unchar unsigned char 

那么当我在fun.c中还需要重新创建替换宏unchar吗 可以不在创建而直接使用吗? 

答案是需重新创建,不能直接使用。但你可以把一些在多个文件中使用的宏、全局变量等统一定义到一个头文件中,那这样就可以避免多次定义了。
2.有可能引起头文件的重复包含,如果头文件是你自己写的话,一般要写上:
#ifndef __XXXX_H
#define __XXXX_H
/*你的头文件内容*/
#endif
所有C标准头文件都有类似的结构。你可以自行查看编译器附带的include中的头文件证实。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值