为何C11标准采用‘nondigit’而非‘letter-or-underscore’?
关于C11标准中
nondigit术语命名的疑问解答 根据C11标准6.4.2.1p1,nondigit的定义为:
nondigit: one of _ a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
你提到的命名混淆确实存在——像$这类非数字字符并不在nondigit的定义范围内,这个命名的由来主要和C语言的历史演化以及标准制定的惯例有关:
- 历史兼容性:C语言早期语法定义里就使用了
nondigit这个术语,后续标准延续了这一命名,避免修改术语导致文档和现有代码工具(比如语法分析器、编译器前端)出现兼容性问题。 - 语法上下文限定:在C标准的语境中,
nondigit是专门用于标识符开头的字符定义,它的作用域被严格限定在标识符规则里,并非泛指所有非数字字符。标准制定者认为在这个特定上下文里,开发者能理解它特指“可作为标识符开头的非数字字符”,也就是字母加下划线。 - 术语简洁性:相比
letter-or-underscore,nondigit更简短,在标准文档中反复使用时能减少冗余,符合技术文档追求简洁的惯例。
内容的提问来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

