C语言---分隔符、常量、注释、标识符、关键字、空格
文章目录
- 分隔符
- 注释
- 注意
- 标识符
- 标识符的定义
- 标识符的命名要求
- 合法与非法标识符示例
- 关键字
- 关键字定义
- 关键字一览(按功能分类)
- 空格
- 一、空格的作用:分隔令牌 (Tokens)
- 空格的使用场景
- 必须用空格分隔的情况
- 不能有空格的情况
分隔符
分隔符 | 名称 | 主要用途 |
---|---|---|
; | 分号 | 语句结束符 |
, | 逗号 | 分隔变量、参数、表达式 |
{ } | 花括号 | 定义代码块(函数体、循环体、结构体等) |
( ) | 圆括号 | 函数调用、参数列表、表达式分组、包围条件 |
[ ] | 方括号 | 数组声明和索引 |
# | 井号 | 预处理指令的开始 |
: | 冒号 | switch语句中的case/default标签、位域 |
… | 省略号 | 可变参数列表 |
在 C 程序中,分号 ; 是语句结束符,也就是说,每个语句必须以分号结束,它表明一个逻辑实体的结束。
printf("Hello, World! \n");
return 0;
个单独的分号也可以作为一个空语句,表示什么都不做。例如:
表示do nothing
;
核心思想:分隔符是C语言的语法胶水,它们本身没有计算意义,但决定了代码如何被组织和解讀。忘记使用分隔符(尤其是分号;和花括号{})是最常见的语法错误来源之一。
注释
C 语言有两种注释方式:
以 // 开始的单行注释,这种注释单独占一行。
// 单行注释
/* */ 这种格式的注释可以单行或多行。
/*
这是一个多行注释
可以跨越多行
*/
注意
1、不要在注释内嵌套注释。
2、注释也不能出现在字符串或字符值中,在字符串或字符值中使用和注释语法系统的字符需要使用转移字符。
3、注释中尽量不要出现多个?,在部分编译器中会报错。
标识符
标识符是C语言中最为基础和重要的概念之一,它是程序员用来为各种元素命名的工具。
标识符的定义
标识符是由程序员自定义的名称,用于标识变量、函数、数组、结构体、枚举常量等程序元素。
标识符的命名要求
1、组成字符:
只能由字母(a-z, A-Z)、数字(0-9) 和下划线(_) 三种字符组成。字母是区分大小写的。
2、首字符:
第一个字符必须是字母或下划线,不能是数字。
3、不能是关键字:
标识符的名称不能与C语言的关键字(如 int, if, for, return 等)完全相同。
4、长度限制:
C标准规定,编译器至少需要能够识别标识符的前 63 个字符(C99标准之前是31个)。这意味着如果两个标识符的前63个字符完全相同,编译器可能会将它们视为同一个标识符。但在现代编译器中,这个限制通常不是问题,但为了可读性和可移植性,标识符也不宜过长。
合法与非法标识符示例
合法的标识符 | 非法的标识符 | 原因分析 |
---|---|---|
age | 2nd_place | 以数字开头 |
_count | my-var | 包含了非法字符 - |
studentName | student name | 包含了非法字符 空格 |
MAX_SIZE | int | 与关键字 int 重名 |
isValid | a.b | 包含了非法字符 . |
temp123 | hello$world | 包含了非法字符 $ |
very_long_name_123 | return | 与关键字 return 重名 |
关键字
关键字定义
关键字,也称为保留字,是C语言预先定义的、具有特殊含义和用途的英文单词。
1、你不能将它们用作标识符(如变量名、函数名)。
2、它们的功能是固定的,编译器会根据关键字执行特定的操作。
3、C语言的标准定义了关键字的数量,不同标准版本会略有不同
关键字一览(按功能分类)
功能类别 | 关键字 | 数量 |
---|---|---|
数据类型 | char, int, float, double, void, short, long, signed, unsigned, struct, union, enum | 12 |
控制流 | if, else, switch, case, default, for, while, do, break, continue, return, goto, _Bool | 13 |
存储类别 | auto, static, register, extern, _Thread_local | 5 |
运算符相关 | sizeof, const | 2 |
复杂类型与内存 | typedef, volatile, _Complex, _Imaginary, _Atomic | 5 |
函数说明符 | inline | 1 |
指针限定符 | restrict | 1 |
总计 | 44 |
C99 新增关键字:
_Bool _Complex _Imaginary inline restrict
C11 新增关键字:
_Alignas _Alignof _Atomic _Generic _Noreturn
_Static_assert _Thread_local
空格
C语言中的空格也是一种分隔符,用于帮助编译器区分代码中的不同元素。它本身(在绝大多数情况下)不会影响程序的逻辑,但会极大地影响代码的可读性。
一、空格的作用:分隔令牌 (Tokens)
C编译器在解析代码时,会将其分解成一系列的“令牌”或“单词”,例如int, main, (, ), {, printf, “Hello World”, ;等。
空格的核心作用就是用来分隔这些令牌,让编译器能正确理解你的代码意图。
代码示例:
// 没有空格或分隔不清(无法编译)
intmain(void){intx=10;printf("%d",x);return0;}// 等价于(有空格,可编译)
int main(void) { int x = 10; printf("%d", x); return 0; }
在第一行中,intmain会被编译器视为一个整体,它不认识这个“单词”,所以会报错。同样,intx也会被当成一个未知的标识符。添加空格后,int, main, int, x都被清晰地分开了,编译器就能正确识别它们。
空格的使用场景
当两个令牌(Keywords, Identifiers, Constants)紧挨在一起时,必须用空格(或制表符、换行符)分隔。
必须用空格分隔的情况
关键字和标识符之间:
int age; // 正确:`int` 和 `age` 被空格分开
intage; // 错误:编译器会寻找名为 "intage" 的变量
标识符和标识符之间 (在声明多个变量时,非必须用空格):
int width, height; // 正确:`width,` 和 `height` 被空格分开
int width,height; // 逗号本身是分隔符,空格可选,但加上更清晰
不能有空格的情况
在某些结构中加入空格会导致错误或完全改变含义。
变量名、函数名等标识符内部:
int my variable; // 错误:这声明了两个变量 `my` 和 `variable`
int my_variable; // 正确:用下划线连接成一个标识符
预处理指令中 # 和其后指令之间 (一些现代编译器放宽了此限制,但传统上不行):
# include <stdio.h> // 错误或警告
#include <stdio.h> // 正确:`#` 和 `include` 之间不能有空格
运算符的组成部分之间:
+ + i // 这是两个 `+` 运算符
++i // 这是一个 `++` 自增运算符
数字常量的内部:
100 000 // 错误:这是两个整数 100 和 000
100000 // 正确:一个整数
// 注意:C23标准支持用单引号作为分隔符,如:100'000,但这不是空格。