关闭

C++头文件和编译单元

650人阅读 评论(0) 收藏 举报
 
C++的头文件中不应该有定义,只能有声明,特别是设计到变量的定义时,变量只能在某个CPP文件中定义,不能在h文件中定义,在h文件中定义的后果是这个h文件只能被一个cpp文件包含。
//dc。H文件
Extern int gl_counter;
//main.cpp文件
#incude”dc.h”
Int gl_counter;
//fun.cpp
#incllude”dc.h”
Void f()
{
***************
Gl_counter
***************
}
注意全局变量在cpp文件中只能且必须被定义一次。H文件中的extern ****只是声明,不是定义。定义的语义动作是要给变量分配存储空间。
       C++的编译是分别对每个编译单位进行编译生成,obj的二进制文件,然后链接各个编译模块形成的obj生成可执行模块。
      如果将变量的定义放在h头文件中那么在编译时没有错误,而在链接时侧会出现链接错误,这种错误微软的编译器有时会发现有时不会发现(如果选用rebuild all选项进行编译那么一定会发现重复定义),而在linux下用g++则一定会发 现,这可能是linux下没有用到增量编译的技术。
    
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:19500次
    • 积分:435
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类