extern static 在linux 和 qt下差别

extern static 在linux 和 qt下差别_第1张图片

 从五个点来说

1.p3.h 中 静态定义一个const的int 变量并且赋值

2.p5.h 声明函数test2的定义

3. 直接extern 引用声明 test1() 函数 而不是像p5.h一样 把函数声明写到头文件 在别的.c文件直接包含头文件  第二点和第三点 是引用声明函数的两种用法

4.main函数 中static静态定义一个const变量num,然后在p1.c也是这样定义一个同名变量,这个是为了说明内部链接,在main函数中和p1.c中,这两个变量num是分别存在内存中,如果qt这样写,就会报错

5.外部引用声明一个int的externnum变量,而这个externnum的变量是在p2.c中声明并且定义为30的,这个做法是和把变量写在头文件然后别的.c文件包含头文件去使用这个变量

p1.c

extern static 在linux 和 qt下差别_第2张图片

 p2. cextern static 在linux 和 qt下差别_第3张图片

p3.h

extern static 在linux 和 qt下差别_第4张图片 

p4.c

extern static 在linux 和 qt下差别_第5张图片 

p5.hextern static 在linux 和 qt下差别_第6张图片 

a.out

extern static 在linux 和 qt下差别_第7张图片 

 

 一言以蔽之:

函数 :可以通过extern 和包含对应函数定义的头文件来使用它

变量:可以通过extern 和包含对应变量定义的头文件来使用它

static const int num = 10: 一个.c文件 中这样写,是内部链接,是在这个.c文件自己独立给这个num分了内存,其他的.c文件是不能访问到这个num的,不会有报错(c primer plus书上346页  回去拍个照 贴上来)

这样在qt里面写,也是行的,qt在.c文件(不是.h文件) 写static const int num = 10,是整个程序这给这个num开一个内存,是也会给每个.c文件分属于这个num独立的内存的。

extern static 在linux 和 qt下差别_第8张图片

 

但是如果static const int num = 10写在.h,然后一个.c文件包含这个.h文件,然后又在这个.c文件又定义一个static const int num = 10,就会报错说是重定义。(其实也是很好理解了,包含了头文件就相当于引用声明了num,再一次自己定义声明num,就肯定会报重定义)

 

 

 

你可能感兴趣的:(c++)