You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于链接脚本中定义以下划线开头的标识符是否符合C标准保留标识符规定的问询

链接脚本中定义以下划线开头的标识符是否符合C标准保留标识符规定?

咱们先结合C标准的具体条款来拆解这个问题:

首先看C标准7.1.3「保留标识符」的核心规定:

所有以下划线开头的标识符,在文件作用域的普通命名空间和标签命名空间中,始终被保留供标准使用。

如果程序在保留标识符的适用上下文(除7.1.4允许的情况外)声明或定义了该标识符,或者将保留标识符定义为宏名称,行为是未定义的。

另外,标准里的补充说明提到:

由于外部标识符和某些以下划线开头的宏名称是保留的,实现可以为这类名称提供特殊语义。例如,标识符_BUILTIN_abs可用于指示生成abs函数的内联代码。

回到链接脚本的场景:链接脚本里定义的下划线开头的全局符号(外部标识符),其实触碰了标准的保留规则——这类符号属于文件作用域范畴,标准明确保留了所有下划线开头标识符在该作用域的使用权。除非是编译器/链接器明确允许的实现扩展(对应7.1.4的例外情况),否则在链接脚本里定义这类标识符是不符合C标准规定的,会触发未定义行为。

简单总结:没有实现扩展许可的前提下,链接脚本中定义以下划线开头的标识符不符合C标准保留标识符的规定。

备注:内容来源于stack exchange,提问作者Eugene Sh.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:13:11