首页 >> 严选问答 >

问c 语言标识符有哪些 程序命名符号集合

2026-11-08 10:55:44

答

核心结论 c 语言标识符就是程序员自己给变量 函数 数组 结构体 枚举 宏 标签起的名字,用来在代码里面标识对应的实体,简单理解就是代码里面所有自定义名称都属于标识符,它和关键字是两套东西,关键字是 C 语言本身预留的固定单词,不能拿来当自定义标识符,标识符命名必须遵守官方语法规则,只能由字母 下划线 数字组成,第一个字符不能是数字,区分大小写,不能和关键字重名。之所以要有标识符这套命名规则,是因为编译器需要依靠标识符识别每一个代码实体,区分变量名函数名结构体名,如果命名不符合规则,编译器无法解析,直接编译报错,同时区分大小写的设计,让 Sum sum SUM 被识别成三个完全不同的标识符,这个特性也是初学者经常踩坑的地方。C 标准没有规定标识符最大长度,但是编译器一般只识别前面部分字符,比如老编译器只识别前 31 个字符,长标识符后面字符会被忽略,跨平台开发的时候要留意这个限制。标识符按照用途可以分成用户自定义标识符 预定义标识符两大类,预定义标识符就是库函数名,比如 printf scanf strlen,这类名字虽然不是关键字,但是属于标准库已经使用的名称,虽然语法上允许拿来重命名,但是强烈不建议,会覆盖原有库函数,造成难以排查的 bug。

标识符分类清单

1 用户自定义标识符,程序员自己编写代码定义的名称,包含变量名 函数名 数组名 指针名 结构体标签名 枚举常量名 typedef 别名 goto 标签名 宏名

2 预定义标识符,C 标准库自带的名称,典型代表 printf scanf malloc free strlen strcpy sqrt pow,属于库函数或者宏,语法上不是关键字,但是不推荐占用

3 补充区分,关键字不属于标识符,比如 int void if for while switch return 这些,是系统保留字,禁止作为自定义标识符

标识符命名规则深度说明

清单

1 组成字符仅限英文字母大小写 下划线 阿拉伯数字,不允许中文 空格 特殊符号

2 首字符必须是字母或者下划线,不能以数字开头,比如 123var 是非法标识符,var123 是合法标识符

3 大小写敏感,Age age AGE 属于三个独立标识符

4 不能使用 C 语言关键字作为标识符,比如不能写 int int

5 标识符内部不能有空格,多个单词一般使用下划线分隔,比如 stu_score,也可以用驼峰写法 stuScore

6 以下划线开头的标识符,很多属于编译器和标准库内部保留命名,普通业务代码尽量不要用下划线开头,避免冲突

标识符与关键字预定义标识符对比表格

类别是否可以自定义使用举例特点
用户自定义标识符可以自由定义num func arr程序员自己命名
预定义标识符语法允许但不推荐printf strlen标准库已经占用
关键字禁止作为标识符int if whileC 语言语法保留字

编码注意事项

第一 不要把 printf 这类预定义标识符重新定义成变量或者函数,一旦覆盖,原来标准库函数就失效,编译或者运行出现异常

第二 虽然语法允许下划线开头标识符,但是双下划线开头,或者下划线加大写字母开头,是 C 标准明确保留给编译器实现使用,用户代码尽量避开

第三 中文标识符属于编译器扩展,不是标准 C,跨平台移植的时候其他编译器不支持,标准项目不要使用中文作为标识符

第四 标识符要有可读性,不要写 a b c 这种无意义短名字,规范命名可以提升代码维护性

第五 同一个作用域里面标识符不能重名,不同作用域可以同名,会发生作用域遮蔽,内层标识符会覆盖外层同名标识符

【常见问题】

问题 1 c 语言标识符有哪些,关键字是不是标识符

回答 1 c 语言标识符有哪些,关键字不属于标识符,关键字是 C 语言语法预留单词,不能拿来作为自定义标识符,标识符是用户或者库定义的名称,二者概念要区分开。

问题 2 c 语言标识符有哪些,数字能不能放在标识符开头

回答 2 c 语言标识符有哪些,数字不能放在标识符开头,首字符必须是字母或者下划线,数字只能放在标识符后面位置,比如 var1 是合法,1var 属于非法标识符。

问题 3 c 语言标识符有哪些,printf 算不算标识符

回答 3 c 语言标识符有哪些,printf 属于预定义标识符,是标准库函数名称,它不是关键字,语法上可以重命名,但是不建议覆盖,会破坏原有库函数功能。

问题 4 c 语言标识符有哪些,标识符区分大小写吗

回答 4 c 语言标识符有哪些,C 语言标识符严格区分大小写,Sum sum SUM 是三个不同标识符,编译器会识别成独立名称,写代码的时候大小写写错会报未定义错误。

【免责申明】

本文内容仅作为 c 语言标识符有哪些相关知识学习参考,不同编译器对长标识符识别长度 扩展命名支持存在差异,代码演示仅用于原理讲解,因命名违规或者覆盖预定义标识符造成编译运行异常,由使用者自行承担。

 

相关阅读

最新文章