当前位置: 首页 > news >正文

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个字符完全相同,编译器可能会将它们视为同一个标识符。但在现代编译器中,这个限制通常不是问题,但为了可读性和可移植性,标识符也不宜过长。

合法与非法标识符示例

合法的标识符非法的标识符原因分析
age2nd_place以数字开头
_countmy-var包含了非法字符 -
studentNamestudent name包含了非法字符 空格
MAX_SIZEint与关键字 int 重名
isValida.b包含了非法字符 .
temp123hello$world包含了非法字符 $
very_long_name_123return与关键字 return 重名

关键字

关键字定义

关键字,也称为保留字,是C语言预先定义的、具有特殊含义和用途的英文单词。
1、你不能将它们用作标识符(如变量名、函数名)。
2、它们的功能是固定的,编译器会根据关键字执行特定的操作。
3、C语言的标准定义了关键字的数量,不同标准版本会略有不同

关键字一览(按功能分类)

功能类别关键字数量
数据类型char, int, float, double, void, short, long, signed, unsigned, struct, union, enum12
控制流if, else, switch, case, default, for, while, do, break, continue, return, goto, _Bool13
存储类别auto, static, register, extern, _Thread_local5
运算符相关sizeof, const2
复杂类型与内存typedef, volatile, _Complex, _Imaginary, _Atomic5
函数说明符inline1
指针限定符restrict1
总计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,但这不是空格。
http://www.lryc.cn/news/626823.html

相关文章:

  • 笔试——Day44
  • 域名加白怎么做
  • 实战:本地大模型+function Calling,获取北京天气
  • 保姆级Debezium抽取SQL Server同步kafka
  • JSON::Value 功能详解:从三目运算符到高级用法
  • Pytest项目_day20(log日志)
  • PyTorch API 2
  • GPT-5 上线风波深度复盘:从口碑两极到策略调整,OpenAI 的变与不变
  • C++开发/Qt开发:单例模式介绍与应用
  • 拓扑排序判断环 P1347 排序题解
  • 第二十七天:游戏组队问题
  • 跨平台 RTSP/RTMP 播放器工程化实践:低延迟与高稳定性的挑战与突破
  • Redisson最新版本(3.50.0左右)启动时提示Netty的某些类找不到
  • pip 安装常见错误及实例化解决办法大全
  • Tomcat部署与HTTP协议详解
  • 凸问题-非凸问题-非凸模型
  • 第十四届“中国软件杯”大赛晋级现场总决赛名单公布
  • PyTorch API 6
  • 单片机通信协议核心关系梳理笔记(UART/USART/232/485/SPI/12C/LIN/BLE/WIFI)
  • Spring Boot 3.4.x 性能优化实战:用 Undertow 替换 Tomcat 全指南​
  • JavaScript 性能优化实战:从原理到落地的完整指南
  • 【OneAI】使用Rust构建的轻量AI网关
  • 【Axure高保真原型】拖拉拽画圆
  • JavaScript 性能优化实战(易懂版)
  • 实验8.20
  • LeetCode 刷题【47. 全排列 II】
  • 一种融合AI与OCR的施工许可证识别技术,提升工程监管效率,实现自动化、精准化处理。
  • 【解决方案】powershell自动连接夜神adb端口
  • 深入解析RAGFlow六阶段架构
  • 结合SAT-3D,运动+饮食双重养腰新方式