免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7662 | 回复: 6
打印 上一主题 下一主题

[函数] 头文件中的inline函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-28 11:20 |只看该作者 |倒序浏览
我看到GCC的文档中对inline有这样的描述, 如果inline没有声明为static, 那么编译器必须假设该函数可能被其他文件所引用, 因此不会产生内联代码(大意), 我的问题是, 此条款对放在投文件中的inline是否适用?

论坛徽章:
0
2 [报告]
发表于 2007-09-28 11:26 |只看该作者
放在头文件的内联函数应该不用加static的吧,默认具有内部链接特性的。

论坛徽章:
0
3 [报告]
发表于 2007-09-28 11:30 |只看该作者
原帖由 zwylinux 于 2007-9-28 11:26 发表
放在头文件的内联函数应该不用加static的吧,默认具有内部链接特性的。


正是因为头文件中的inline不加static, 所以按照上述条款, 该函数不会生成为内联代码, 这样就产生了inline函数在头文件中定义无效的结论.

论坛徽章:
0
4 [报告]
发表于 2007-09-28 12:16 |只看该作者
也许是gcc要求头文件的内联函数要用static限定吧,c99好像没这样说

论坛徽章:
0
5 [报告]
发表于 2007-09-28 14:03 |只看该作者
关注一下

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
6 [报告]
发表于 2007-09-28 14:05 |只看该作者
头像好PL

论坛徽章:
0
7 [报告]
发表于 2007-09-28 15:23 |只看该作者
经过实验,  发现此条款适用于头文件, 不过还是有些小小变动.
在头文件中定义的inline函数, 如果不加static或者是extern, 编译器在内联该函数的同时会生成该函数自己的代码, 这样如果在两个源文件中包含了头文件会导致链接时函数重定义错误. 所以放在头文件中的inline最好声明为extern, 这种情况下, 编译器永远不会为inline生成自己的代码, 即使是引用该函数地址. 如果使用static, 只要不对函数地址进行引用, 否则将不会生成自己的代码.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP