当前位置: 首页 > 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.dtcms.com/a/340473.html

相关文章:

  • LoRa 网关组网方案(二)
  • 【科研绘图系列】R语言绘制平行坐标图
  • 保姆级Debezium抽取SQL Server同步kafka
  • 绕过 C 标准库限制执行系统命令:系统调用、Shellcode 和裸机二进制
  • week2-[一维数组]出现次数
  • css中的性能优化之content-visibility: auto
  • InfluxDB 查询性能优化实战(二)
  • 【解决方案】powershell自动连接夜神adb端口
  • 手撕线程池
  • AI 伦理的 “灰色地带”:当算法拥有决策权,公平与隐私该如何平衡?
  • C# NX二次开发:面收集器控件和曲线收集器控件详解
  • 边缘智能体:Go编译在医疗IoT设备端运行轻量AI模型(下)
  • DAY 51 复习日
  • Redis 复制功能是如何工作的
  • Android 开发问题:android:marginTop=“20px“ 属性不生效
  • 多系统 Node.js 环境自动化部署脚本:从 Ubuntu 到 CentOS,再到版本自由定制
  • 云原生俱乐部-k8s知识点归纳(5)
  • 自动化测试用例生成:基于Python的参数化测试框架设计与实现
  • MeterSphere断言操作
  • 多肽修饰——胆固醇(chol)
  • B站 XMCVE Pwn入门课程学习笔记(7)
  • sigmastar设备树引脚复用研究
  • 《GPT-OSS 模型全解析:OpenAI 回归开源的 Mixture-of-Experts 之路》
  • sqlalchemy 是怎么进行sql表结构管理的,怎么进行数据处理的
  • 【Svelte】load 函数中如何获取 url 信息?
  • 从基础到本质:文件 IO 操作全解析
  • 医学统计学常用方法汇总,差异性/相关回归/生存分析/一致性检验
  • windows electron-builder打包后应用图标更新问题
  • RabbitMQ:SpringAMQP 声明队列和交换机
  • 数据湖学习