.c 文件和 .h 文件的区别 以及 链接出错的问题(二)

21 篇文章 0 订阅

1.头文件可以预先告诉编译器一些必要的声明,让编译器顺利进行下去,在连接实现以前.未必出现实际的定义. 

头文件的意义在 
a.使得程序简明,清晰. 
b.避免了重复编写相同的声明代码. 
2.**.c和**.h文件没有必然的联系., 在XX.h文件中声明变量,如int a;,即时在XX.c中include"XX.h", 直接赋值 a = 2;仍然会出错,需要使用 int  a = 2.

3.在 .h文件中实现函数(不只是声明),则其他多个.c文件引用该.h文件时,会出现重定义错误;通过只在.h中声明可以解决。

5..c和.cpp的区别(在VS2010下)

在.h文件中只声明函数,在其他多个.c文件中引用该.h文件的时候,不会出现链接时redefine问题,同样在多个.c文件中引用该.h文件也不会出现重定义问题;

        在.h文件中声明变量,如int a,其他多个 .c文件中引用该头文件,不会出现重定义问题; 如果在.h文件中只声明并且定义变量,如int a = 1,其他多个 .c文件中引用该头文件,会出现重定义问题(redefinition; multiple initialization);

       在.h文件中只声明变量,如int a,其他多个 .cpp文件中引用该头文件,会出现重定义问题(redefinition; multiple initialization)或者链接出错(int A" (?A@@3HA) already defined in a.obj); 如果在.h文件中 使用 extern int a; 则不会出现问题。

     如果在.h文件中,声明结构体struct或者类class,不会出现重定义或者链接问题;但是如果定义一个结构体或者类,则会出现重定义或者链接错误;

而在.c或者.cpp中则不会出现错误。

.h文件中:

class CA
{
int a;
public:
CA()
{
a = 1;
}
~CA();
void init()
{
a = 1;
}
};

多个cpp文件引用该h文件,不会出现问题。


/

所以,这里要区别声明和定义的区别: int  a;实际上已经是定义了一个int型变量,而没有初始化;int a = 1,也是定义变量并且初始化;extern int  a;相当于只是声明;

       而对于自定义的数据类型,如结构体和类,声明就是写出他们的各种内部结构,如

struct TestStruct
{
int a;
int b;
double c;
void init()
{
a = 1;
};

};   而定义就是用该结构体定义一个该类型的变量,如 TestStruct   Ts;



     


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值