文章目录

  • 分隔符
  • 注释
    • 注意
  • 标识符
    • 标识符的定义
    • 标识符的命名要求
    • 合法与非法标识符示例
  • 关键字
    • 关键字定义
    • 关键字一览(按功能分类)
  • 空格
    • 一、空格的作用:分隔令牌 (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.pswp.cn/bicheng/93994.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93994.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93994.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建Vue项目的不同方式及项目规范化配置

1 项目的创建与运行 1.1 基于webpack构建工具——vue-cli脚手架 1. 安装脚手架 &#xff1a;npm i -g vue/cli # 安装一次即可&#xff0c;之前安装过则无需重复安装 2. 切换到项目所在目录 &#xff1a;cd 项目所在目录 3. 创建项目 &#xff1a;vue create 项目名 4. 自定…

K距离间隔重排字符串 (LeetCode 358) — Swift解法 + 可运行Demo

文章目录摘要描述解决方法分析问题和解决代码代码要点详解示例测试和结果时间复杂度空间复杂度总结摘要 这道题的核心是&#xff1a;把字符串里的字符重新排一下顺序&#xff0c;让相同字符之间至少隔开 k 个位置。如果做不到&#xff0c;就返回空串。看上去像“排座位”&…

React native Navigation 详解

Tab Navigator(标签导航器) 概念 Tab Navigator 是 React Navigation 中用于创建底部或顶部标签栏导航的组件。它允许用户在不同的屏幕之间快速切换,每个标签对应一个独立的屏幕。 基本用法 import {createBottomTabNavigator } from @react-navigation/bottom-tabs; im…

[GraphRAG]完全自动化处理任何文档为向量知识图谱:AbutionGraph如何让知识自动“活”起来?

在当今信息爆炸的时代&#xff0c;企业和研究人员面对大量非结构化文档时&#xff0c;如何高效地提取、存储和查询其中的知识&#xff0c;已成为一个核心挑战。传统的关键词检索早已无法满足深层次语义关联和智能问答的需求。 每天面对成百上千份PDF论文、Excel报告、行业白皮…

模拟tomcat接收GET、POST请求

访问&#xff1a; http://localhost:10086/mytomcatMyTomcat/ └── src/└── com/└── zhang/├── MyServer.java├── MyRequest.java├── MyResponse.java├── MyMapping.java├── MyServlet.java└── MyHttpServlet.java核心类功能说明 MyServer.java 服务…

氯化钇:科技与高性能材料的核心元素

氯化钇是钇元素的氯化物&#xff0c;广泛应用于高性能材料、催化剂、光电技术等领域。作为稀土元素之一&#xff0c;钇因其独特的物理和化学特性&#xff0c;在现代工业中具有重要地位&#xff0c;而氯化钇则是其中的关键化合物之一。氯化钇的优势与特点1. 化学稳定性强氯化钇具…

【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析

&#x1f618;个人主页&#xff1a;Cx330❀ &#x1f440;个人简介&#xff1a;一个正在努力奋斗逆天改命的二本觉悟生 &#x1f4d6;个人专栏&#xff1a;《C语言》《LeetCode刷题集》《数据结构-初阶》 前言&#xff1a;今天这篇博客就给大家将一个计数排序&#xff0c;然乎就…

Incredibuild 新增 Unity 支持:击破构建时间过长的痛点

任何开发过复杂 Unity 项目的团队都会告诉你&#xff1a;构建速度已成为生产流程中的核心痛点。Unity 灵活且强大&#xff0c;但随着项目规模扩大&#xff08;尤其是包含 3D 资源、复杂着色器和庞大内容管线的项目&#xff09;&#xff0c;构建过程会逐渐变成一项隐性成本。 多…

大数据接口 - 收入评估(社保评级)API

请求端点 {"post": "https://api.tianyuanapi.com/api/v1/JRZQ09J8?t13位时间戳" }请求头字段名类型必填描述Access-Idstring是账号的 Access-Id对于业务请求参数 通过加密后得到 Base64 字符串&#xff0c;将其放入到请求体中&#xff0c;字段名为 data&…

C++八股 —— 设计模式

文章目录一、创建型模式1. 单例模式2. 工厂模式二、结构型模式1. 装饰器模式2. 代理模式三、行为型模式1. 观察者模式2. 策略模式一、创建型模式 1. 单例模式 C八股 —— 单例模式_c 单例模式-CSDN博客 2. 工厂模式 参考&#xff1a;【设计模式】工厂模式详解-----简单工厂…

在openeuler中如何使用 firewalld 开放指定端口

在 OpenEuler 中使用 firewalld 开放指定端口的操作步骤如下&#xff0c;需区分临时开放&#xff08;重启后失效&#xff09;和永久开放&#xff08;重启后保留&#xff09;两种场景&#xff1a;一、查询端口当前状态首先确认端口是否已开放&#xff0c;避免重复配置&#xff1…

【Java进阶】Java JIT 编译器深度解析与优化实践

Java JIT 编译器深度解析与优化实践Java JIT 编译器深度解析与优化实践一、JIT 编译器核心原理1. JIT 工作流程2. 热点代码检测机制二、Java 8 JIT 优化升级1. 分层编译优化2. 方法内联增强3. 循环优化升级4. 逃逸分析增强5. 向量化支持三、JIT友好代码设计原则1. 方法设计优化…

【本地部署问答软件Apache Answer】Answer开源平台搭建:cpolar内网穿透服务助力全球用户社区构建

文章目录前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建远…

华为数通认证学习

1、华为人才认证官网&#xff0c;https://e.huawei.com/cn/talent/portal/#/ 很全面的网站&#xff0c;包含了概述、了解认证、参加考试、学习资源、认证资讯四个板块。可以了解华为认证的整个流程、下载学习资源&#xff08;培训教材、视频课程等&#xff09;&#xff0c;以及…

Android-ContentProvider的跨应用通信学习总结

一、ContentProvider的概念1. ContentProvider 是什么&#xff1f;&#xff08;核心概念&#xff09;ContentProvider 是 Android 四大组件之一。它的核心职责是管理和共享应用的结构化数据。我们可以把它想象成一个应用的**“数据大使馆”**。在一个国家里&#xff08;Android…

Java数据结构第二十六期:解密位图,海量数据处理的 “空间魔法”

专栏&#xff1a;Java数据结构秘籍 个人主页&#xff1a;手握风云 目录 一、位图 1.1. 概念 1.2. 面试题 1.3. 位图的实现 1.4. 位图的应用 一、位图 1.1. 概念 在数据结构中&#xff0c;位图&#xff08;也称为位数组、位向量或位集&#xff09;是一种紧凑的方式来表示一…

芯科科技即将重磅亮相IOTE 2025深圳物联网展,以全面的无线技术及生态覆盖赋能万物智联

作为低功耗无线连接领域的创新性领导厂商&#xff0c;Silicon Labs&#xff08;亦称“芯科科技”&#xff09;将于8月27至29日携其最前沿的人工智能&#xff08;AI&#xff09;和物联网&#xff08;IoT&#xff09;解决方案在深圳举办的IOTE 2025国际物联网展中盛大展出。这场亚…

Linux上安装多个JDK版本,需要配置环境变量吗

简短回答&#xff1a;不需要同时配置多个 JDK 的 JAVA_HOME 和 PATH&#xff0c;但你可以安装多个版本&#xff0c;并通过灵活的方式在它们之间切换。 文章目录✅ 正确做法&#xff1a;安装多个 JDK&#xff0c;但只让一个生效&#xff08;通过环境变量或 alternatives&#xf…

MySQL有哪些高可用方案

大家好&#xff0c;我是锋哥。今天分享关于【MySQL有哪些高可用方案】面试题。希望对大家有帮助&#xff1b; MySQL有哪些高可用方案? 超硬核AI学习资料&#xff0c;现在永久免费了&#xff01; MySQL 高可用方案是指确保 MySQL 数据库在面对硬件故障、网络故障、负载过重等…

【Windows】Windows平台基于加速地址安装vcpkg并集成到Visual Studio 2017

基础运行环境 启动&#xff1a; 适用于 VS 2017 的 x64 本机工具命令提示 ninja 下载压缩包 https://gh-proxy.com/https:/github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-win.zip 直接解压到c:/Windows (无需配置环境变量) CMake 下载安装包 https://gh-proxy…