一个合法的 C 语言用户标识符必须满足以下三个核心条件:

(图片来源网络,侵删)
- 有效字符:只能由 字母(A-Z, a-z)、数字(0-9)和下划线(_) 组成。
- 首字符限制:第一个字符必须是字母或下划线(_),不能是数字。
- 保留字:不能是 C 语言的关键字(Reserved Keywords)或预处理器指令。
详细规则与示例
有效字符
标识符可以包含字母、数字和下划线,但不能包含任何其他字符,例如空格、、、、、 等。
| 合法示例 | 非法示例及原因 |
|---|---|
my_var |
my-var (包含连字符 ) |
count1 |
1count (以数字开头,见规则二) |
_temp |
my var (包含空格) |
System.out |
System.out (包含点号 ) |
MAX_SIZE |
MAX-SIZE (包含连字符 ) |
a |
@a (包含 符号) |
首字符限制
这是初学者最容易犯的错误,标识符的第一个字符必须是字母(大小写均可)或者下划线 _,数字只能出现在第二个字符及以后的位置。
| 合法示例 | 非法示例及原因 |
|---|---|
_globalVar |
123abc (以数字开头) |
counter |
2ndPlace (以数字开头) |
_ |
#define (以 开头,且是预处理器指令) |
不能是关键字或预处理器指令
C 语言保留了一些单词用于特定的语法功能,这些单词被称为关键字,你不能用它们作为变量名、函数名等,以 开头的预处理器指令(如 include, define, ifdef)也不能用作标识符。
| C 语言关键字 (C99 标准) | 非法示例及原因 |
|---|---|
auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while |
int (关键字) |
for (关键字) |
|
if (关键字) |
|
define (预处理器指令) |
|
include (预处理器指令) |
最佳实践与风格指南
除了遵守语法规则,良好的编程风格能让你的代码更易读、更专业,虽然以下规则不是 C 语言强制要求的,但强烈推荐遵循。
-
见名知意:选择能够描述变量或函数用途的名称。
- 好:
student_age,calculate_sum,is_valid - 差:
a,b,x,foo
- 好:
-
命名约定:
- 变量和函数名:通常使用小写字母,如果名称由多个单词组成,常用驼峰命名法,即每个新单词的首字母大写,
myStudentName,getUserName。 - 常量:通常使用全大写字母,单词之间用下划线分隔,
MAX_BUFFER_SIZE,PI。 - 结构体、联合体、类型定义:通常使用首字母大写的驼峰命名法,
struct Student,typedef struct Node Node_t。
- 变量和函数名:通常使用小写字母,如果名称由多个单词组成,常用驼峰命名法,即每个新单词的首字母大写,
-
避免下划线开头(除非有特殊用途):
- 单个下划线
_或双下划线__开头的名称通常有特殊含义,可能被编译器或标准库使用。_argc和__func__是编译器内置的标识符,为了避免冲突,不要在你的代码中创建以下划线开头的全局标识符。 - 局部变量中偶尔使用单个下划线开头是可以接受的,但最好也避免。
- 单个下划线
完整示例代码
下面是一个 C 程序,其中包含了合法和非法的标识符,你可以编译它来观察编译器的错误提示。
#include <stdio.h>
// 合法的用户标识符示例
int main() {
// 1. 合法的变量名
int student_age = 20;
float average_score = 95.5f;
char first_name[50] = "Zhang";
_is_running = 1; // 合法,但局部变量用下划线开头不推荐
// 2. 合法的函数名
int calculate_sum(int a, int b) {
return a + b;
}
// 3. 合法的常量(使用预处理器指令)
#define MAX_STUDENTS 100
// --- 以下是一些非法的标识符,被注释掉 ---
// int 2nd_number; // 错误:数字开头
// long my-var; // 错误:包含连字符
// char if; // 错误:使用了关键字 'if'
// int void; // 错误:使用了关键字 'void'
// double #define; // 错误:使用了预处理器指令 'define'
printf("Student: %s, Age: %d\n", first_name, student_age);
printf("Sum of 10 and 20 is: %d\n", calculate_sum(10, 20));
printf("Max allowed students is: %d\n", MAX_STUDENTS);
return 0;
}
记住这三个核心规则,你就能创建出所有合法的 C 语言用户标识符:
- 组成:字母、数字、下划线。
- 开头:字母或下划线。
- 禁止:不能是关键字或预处理器指令。
遵循良好的命名风格,会让你的编程之路更加顺畅。
