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

C23中源字符集与执行字符集的区别及特殊字符标识符合法性问题

C23字符集相关问题解答

一、源字符集与执行字符集的区别

  • 源字符集:是编写C源代码时使用的字符集合,涵盖注释、字符串字面量、标识符、编译指令等所有你在源码中输入的字符。编译器编译的第一步会将源文件字符转换为内部统一的字符表示(如Unicode代码点),后续的语法解析、宏处理、标识符识别等操作都基于这个转换结果,属于代码「静态编写阶段」的字符规则。
  • 执行字符集:是程序运行时用于表示字符数据的字符集合。源码中的字符串字面量、字符常量在编译生成可执行文件时,会被转换为执行字符集对应的编码存储,程序运行时读取这些字符数据遵循的就是执行字符集的规则,属于代码「动态运行阶段」的字符规则。

两者都包含标准强制要求的「基本集」和允许实现额外支持的「扩展集」,C23正是将$、@、`加入了这两个字符集的扩展部分。

二、C23中$、@、`是否允许用于标识符

C23仅将这三个字符纳入源字符集和执行字符集,这意味着你可以在注释、字符串字面量、字符常量中合法使用它们,但标准并未将其纳入标识符的允许字符范围。

按照C23标准规定,标识符只能由字母(含符合Unicode属性的扩展字母)、数字、下划线组成,且首字符不能是数字。不过很多主流编译器(如GCC、Clang、MSVC)此前就支持将$作为标识符的扩展特性,C23之后,因为这三个字符被正式纳入源字符集,编译器可以更合规地提供这类扩展支持,但这属于编译器的非标准特性,并非C23强制要求的行为。

内容的提问来源于stack exchange,提问作者Madagascar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:35:02