「local」关键字有什么作用?它与static关键字存在哪些区别?
关于C/C++中
local关键字的说明 首先明确:标准C和标准C++中并没有原生的local关键字,你遇到的用法基本属于以下两种情况:
- 项目自定义的宏别名
绝大多数场景下,local都是项目为了提升可读性自定义的宏,定义如下:
这种场景下#define local staticlocal和static的作用完全一致,没有任何差异。用local代替static的目的是规避static关键字的多义性问题:static在C/C++中同时承担了「设置静态存储周期」和「设置内部链接属性」两个完全不同的作用,用local单独表示「当前翻译单元内可见」的内部链接属性,代码语义更直观,你贴的示例代码本质就是等价于static inline int jump(),是仅当前文件可见的内联函数。 - 特定编译器的非标准扩展
少数嵌入式领域的专用编译器(比如部分DSP编译器、老版本的GCC扩展)会把local作为扩展关键字实现,功能也基本和用于修饰内部链接的static一致,只有极个别场景会有细微的专属语义,这种情况需要结合对应编译器的文档确认,但通用开发场景几乎不会遇到。
为什么很少见到local的使用
因为它不属于C/C++标准语法,仅在特定项目或特定编译环境下生效,跨编译器、跨项目移植时会有兼容问题,所以通用代码库基本不会使用这个写法。
内容的提问来源于stack exchange,提问作者stackuser
相关产品推荐
相关产品推荐

