| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3471 人关注过本帖
标题:为什么linux双链表的函数实现写在头文件里?
只看楼主 加入收藏
KAKA55
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-22
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:18 
为什么linux双链表的函数实现写在头文件里?
如题,为什么linux双链表的函数实现写在头文件里?如果我有两个.c文件都用这个头文件,这样会不会带来一个双链表函数被编译多次从而在代码中生成多个副本的问题?
搜索更多相关主题的帖子: linux 双链表 函数 头文件 生成 
2018-06-21 10:12
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
全部都加了 static
没关系的

https://zh.
2018-06-21 10:29
KAKA55
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-22
收藏
得分:0 
回复 2楼 lin5161678
是加了static,但如果我两个c文件里都包含了这个头文件,编译时岂不是被编译两次,生成两段一样的代码》
2018-06-21 10:47
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:10 
回复 3楼 KAKA55
有没有inline
有的话就不用管
编译器有优化

https://zh.
2018-06-21 11:15
KAKA55
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-4-22
收藏
得分:0 
回复 4楼 lin5161678
有inline,请问如果没有inline是不是就会生成多段重复的代码?
2018-06-21 14:50
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
你可以把实现单独写出来,夹头文件编译的时候加上#program once
2018-06-21 15:40
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
static表示编译生成的目标文件符号表中不会产生相应的信息,也就是说用了static的函数以及变量只能在自己所在的.c(或等同的)源代码文件中才能被引用。(专业一点就是说,只能在自己所在的编译单元中被看到。)所以多个地方引用不会出现链接错误。
2018-06-21 20:30
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
以下是引用lin5161678在2018-6-21 11:15:53的发言:

有没有inline
有的话就不用管  
编译器有优化
楼主问的问题和有没有inline没关系。
2018-06-21 20:31
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:0 
以下是引用花脸在2018-6-21 15:40:19的发言:

你可以把实现单独写出来,夹头文件编译的时候加上#program once
用#program once的话,就是画蛇添足了。本质是没有理解static的用法。
2018-06-21 20:32
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 9楼 八画小子
static的含义:
static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。
static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。
我的意思是加上#program once 就不用加static
2018-06-21 20:39
快速回复:为什么linux双链表的函数实现写在头文件里?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027806 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved