📄 一句话概括
标识符就是你给变量、函数、类起的名字。硬规则四条:只能由字母、数字、下划线组成;不能用数字开头;不能是关键字(int、if、return 这些);区分大小写(age 和 Age 是两个不同的名字)。软规则一条:见名知意——编译器不管你怎么起,但三个月后的你会感谢自己。
一、硬规则(违反了直接报错)
| 规则 | 合法 | 非法 | 报错大意 |
|---|---|---|---|
| 只能用字母、数字、下划线 | age stu2 _count max_value |
a-b a+b a.b |
把名字切成了两半,报"未声明" |
| 不能数字开头 | stu2 n1 |
2age 1st |
invalid suffix/语法错误 |
| 不能是关键字 | count value |
int if for return const true |
语法错误 |
| 不能有空格 | totalPrice |
my age |
被当成两个名字 |
| 区分大小写 | age、Age 各是各的 |
— | 不会报错,但会认错人 |
常用的关键字(背不下来没关系,写多了自然记住):
int double float char bool void short long unsigned
if else switch case for while do break continue return
const true false class struct namespace using public private
📝 一个实用技巧
Dev-C++ 会把关键字显示成高亮颜色(通常是蓝色/加粗)。如果你给变量起了关键字名,一眼就能看出来——颜色不对,名字就有问题。
二、软规则(风格,编译器不管但人管)
| 建议 | 差 | 好 |
|---|---|---|
| 见名知意 | a x1 tp |
age totalPrice studentCount |
| 小驼峰(变量/函数) | totalprice |
totalPrice |
| 下划线(另一种风格) | totalPrice |
total_price(两种风格选一种,别混用) |
| 常量全大写 | pi maxSize |
PI MAX_SIZE |
| 避免单字母 | d(日期?距离?) |
只有循环变量 i j k 是惯例允许的 |
| 避开易混字符 | l(像 1)、O(像 0) |
len、count |
一条真实教训:程序里 l 和 1、O 和 0 混在一起,是肉眼排错的地狱。起名时躲开这两个字母,比事后 debug 便宜得多。
三、动手 Demo:把非法名字一个个试过去
新建 name.cpp,一次只改一处,每轮 Ctrl+S → F11,记下报错原话:
#include <iostream>
using namespace std;
int main() {
int 2age = 18; // 第一轮:数字开头
// int my age = 18; // 第二轮:中间有空格
// int int = 18; // 第三轮:用关键字
// int a-b = 18; // 第四轮:含减号
return 0;
}
看到什么算成功:四轮都能看懂报错,并说出"违反了哪条规则"。
特别注意第四轮:int a-b = 18; 的报错可能很奇怪(说 b 未声明之类)——因为编译器把它理解成 int a - b = 18,即"用变量 b 去减"。这类报错最有迷惑性,记住结论:名字里不能有运算符。
30 秒实验:写 int age = 18; int Age = 20; 然后分别输出——两个变量互不影响。这就是"区分大小写"的实证。
四、常见误区
- "变量名可以随便起,反正是给机器看的"——机器看类型,人看名字。代码 90% 的时间是被人读的,只有 10% 的时间被执行
- "
_count以下划线开头,最安全"——不一定。下划线开头 + 大写的名字(如_Count)是保留给编译器和库的,自己别用;单个下划线开头(_count)能用但风格不佳 - "中文名字也能用吧"——部分编译器(含 Dev-C++ 的 MinGW)允许,但换编译器、换平台就可能出事,而且输入法切换容易带进全角字符。一律用英文
- "名字越短越好"——
i、j、k只在"三五行的循环"里合理。跨几十行的变量,名字必须能自解释
自测四问(点开对答案)
1. 标识符的硬规则有哪几条?——只能用**字母/数字/下划线**;**不能数字开头**;**不能是关键字**;**区分大小写**。 2. `_count`、`stu2`、`2stu` 哪几个合法?——`_count` 和 `stu2` 合法;`2stu` 非法(数字开头)。 3. `age` 和 `Age` 是同一个变量吗?——**不是**,C++ 区分大小写。 4. 命名为什么要避开 `l` 和 `O`?——因为它们和数字 `1`、`0` 长得太像,容易看错、引发排错困难。- ☑ 变量的声明及赋值