头文件与extern

>>>>
为何定义不应该放头文件:
 由下面关于编译模块(单元)的定义可知,如果f1.c,f2.cpp均include了a.h,则a.h中的变量或函数定义,会被编译到f1.o,f2.o中,链接时导致重复定义的错误。

2008/12/30 lwl <lwl.roger@gmail.com>:
> 2008/12/30 lwl <lwl.roger@gmail.com>:
>> 可以这样的理解:
>>
>>
>> 编译单元
>> 当一个c或cpp文件在编译时,预处理器首先递归包含头文件,
>>
>> 形成一个含有所有 必要信息的单个源文件,这个源文件就是一个编译单元。
>>
>> 这个编译单元会被编译成为一个与cpp 文件名同名的目标文件 。
>>
>> 连接程序把不同编译单元中产生的符号联系起来,构成一个可执行程序。
>>
>> 2008/12/30 lwl <lwl.roger@gmail.com>:
>>> .c,.cpp文件就是一个编译模块。.h文件不是。
>>>
>>>      高教版《面向对象程序设计基础(C++语言描述)》第89页对模块是这样定义的:"组成C++程序的文件称为文件模块,有时也简称模块。""C++语言以模块作为编译的基本单位,即以一个源代码文件作为不可再细分的单位进行编译。"
>>>          所以,一个"编译模块"就是同一个源文件   。
>>>
>>> http://www.cppblog.com/woaidongmao/archive/2008/11/07/66254.aspx
>>>
>>> 2008/12/29 lwl <lwl.roger@gmail.com>:
>>>> extern用法:
>>>> +用extern或者include,二选一。都要的情况还没遇到。
>>>>
>>>> 遗留问题:
>>>> c/c++中:
>>>>  编译阶段,是以文件为单位还是以模块为单位生成目标文件?
>>>>
>>>> >
>>>>
为何定义不应该放头文件:
 由下面关于编译模块(单元)的定义可知,如果f1.c,f2.cpp均include了a.h,则a.h中的变量或函数定义,会被编译到f1.o,f2.o中,链接时导致重复定义的错误。
>>>
>>> >>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值