__const与__const__扩展关键字的区别及共存原因
GCC/Clang中
__const与__const__的区别及共存原因 功能上完全无区别:这两个扩展关键字都是C99标准
const的替代拼写,在所有C、C++语言模式下,实现的语义和const完全一致——不管是用来声明只读变量、限定函数参数不可修改,还是标记返回值为只读,二者的表现没有任何差异。同时被支持的原因是历史兼容性:
- 早期编译器扩展遗留:在C99正式把
const纳入标准之前,部分编译器就已经用__const作为非标准扩展来实现只读变量的功能,很多老项目的代码里已经广泛使用了这个写法。 - 符合标准命名规范:后来为了贴合C标准中“以下划线开头且紧跟下划线或大写字母的标识符归实现方保留使用”的规则,编译器新增了
__const__这种双下划线包裹的形式,避免和用户自定义的标识符产生命名冲突。 - 兼容新老代码:为了不让依赖
__const的旧代码直接编译失败,同时让新代码可以使用更规范的__const__,编译器就同时保留了这两种写法,确保所有历史代码和新编写的代码都能正常编译。
- 早期编译器扩展遗留:在C99正式把
实际开发中,你完全可以互换使用这两个关键字,不会对代码逻辑产生任何影响。
内容的提问来源于stack exchange,提问作者user31571297




