static、inline、static inline?

本文讨论了C/C++中的static和inline函数特性,指出static用于限制函数的作用域,防止多文件链接时的重复定义问题。同时强调了inline只是建议函数内联,实际是否展开由编译器决定,而在C++中inline函数可以有多个定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • static函数
    • static 一般是加在.cpp/.c里边的,用于声明这个函数仅用于当前源文件,其它编译实体不可用
  • inline函数
    • 如果一个函数是内联的,那么在编译时,编译器会把该函数的代码在每个调用该函数的地方展开
    • inline关键字只能建议函数内联,至于该函数是否真的内联完全由编译器决定
  • static inline
    • static inline 只在纯 C 中有意义,在 C++ 中是没有这个写法的
    • 纯C中,分别将多个源文件(.c)编译成目标文件(.o)时,如果编译器不对inline函数进行内联,则这多个源文件中各自都有一段该函数的定义,此时将这多个.o文件链接,则会出现重复定义的错误。所以要加一个static,来将各自的内联函数作用域限定在自身中,这样就不会出现重复定义的错误。说白了,就是因为编译器不靠谱(不一定会将inline修饰的函数内联展开),所以加一个static防止出现重复定义的错误。
    • 在 C++ 中,inline 修饰的函数是允许存在多份定义,如果编译器不对inline函数进行内联,则这多个源文件中各自都有一段该函数的定义,此时将这多个.o文件链接,g++编译器会只保留一段函数定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值