### 2. 基本语法
上一小节我们知道了一个简单的小应用由哪些部分组成,这将有助于我们理解 C 语言的其它基本的构建块。
#### C 的令牌(Token)
c 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字串符值、或者是一个符号。
~~~
printf("Hello, World! \n");
~~~
这五个令牌分别是:
~~~
printf
(
"Hello, World! \n"
)
;
~~~
#### 分号 ;
在 **C 程序中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束**。
例如,下面是两个不同的语句:
~~~
printf("Hello, World! \n");
return 0;
~~~
#### 注释
**C 语言有两种注释方式:**
~~~
// 单行注释
~~~
以//开始的单行注释,这种注释可以单独占一行。
~~~
/* 单行注释 */
/*
多行注释
多行注释
多行注释
*/
~~~
/\* \*/这种格式的注释可以单行或多行。
>[info]您不能在注释内嵌套注释,注释也不能出现在字符串或字符值中。
#### 标识符
**C 标识符是用来标识变量、函数,或任何其他用户自定义项目的名称**。一个标识符以字母 A-Z 或 a-z 或下划线 \_ 开始,后跟零个或多个字母、下划线和数字(0-9)。
C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是**区分大小写**的编程语言。因此,在 C 中,*Manpower*和*manpower*是两个不同的标识符。下面列出几个有效的标识符:
~~~
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal
~~~
#### 关键字
下面我们来看一下 C 中的关键字,这些关键字不能作为常量名,变量名或者其它标识符名称(跟 Java 类似)。
| 关键字 | 说明 |
| --- | --- |
|auto |声明自动变量 |
|break | 跳出当前循环 |
|case | 开关语句分支 |
|char| 声明字符型变量或者函数返回值类型 |
|const| 声明只具可读变量 |
|continue| 结束当前循环,开始下一个循环 |
|default| 开关语句中的其它分支 |
|do| 循环语句的循环体 |
|double| 声明双进度浮点型变量或者函数返回值类型 |
|else| 条件语句否定分支|
|enum | 声明枚举类型 |
|extern | 声明变量或函数是在其它文件或本文件的其他位置定义 |
|float | 声明浮点型变量或者函数返回值类型 |
|for | 一种循环语句 |
|goto |无条件跳转语句 |
|if |条件语句 |
|int |声明整型变量或函数 |
|long |声明长整型变量或函数返回值类型 |
|register | 声明寄存器变量|
|return |子程序返回语句 |
|short |声明短整型变量或者函数 |
|signed |声明有符号类型变量或者函数 |
|sizeof |计算数据类型或者变量长度(即所占字节数) |
|static |声明静态变量 |
|struct | 声明结构体类型|
|switch |用于开关语句 |
|typedef | 用以给数据类型取别名 |
|unsigned| 声明无符号类型变量或函数 |
|union| 声明共用体类型 |
|void | 声明函数无返回值或无参树,声明无类型指针 |
|volatile | 说明变量在程序执行中可被隐含地改变 |
|while | 循环语句的循环条件 |
#### C99 新增关键字
| | | | | |
| --- | --- | --- | --- | --- |
| _Bool |_Complex | _Imaginary | inline | restrict |
#### C11 新增关键字
| | | | | |
| --- | --- | --- | --- | --- |
| _Alignas |_Alignof | _Atomic | _Generic | _Noreturn |
| _Static_assert |_Complex | _Thread_local | | |
#### C 中的空格
**只包含空格的行,被称为空白行,可能带有注释,C 编译器会完全忽略它**。
在 C 中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。因此,在下面的语句中:
~~~
int age;
~~~
在这里,**int 和 age 之间必须至少有一个空格字符(通常是一个空白符),这样编译器才能够区分它们**。另一方面,在下面的语句中:
~~~
fruit = apples + oranges; // 获取水果的总数
~~~
fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。
- 前言
- JNI基础知识
- C语言知识点总结
- ①基本语法
- ②数据类型
- 枚举类型
- 自定义类型(类型定义)
- ③格式化输入输出
- printf函数
- scanf函数
- 编程规范
- ④变量和常量
- 局部变量和外部变量
- ⑤类型转换
- ⑥运算符
- ⑦结构语句
- 1、分支结构(选择语句)
- 2、循环结构
- 退出循环
- break语句
- continue语句
- goto语句
- ⑧函数
- 函数的定义和调用
- 参数
- 函数的返回值
- 递归函数
- 零起点学通C语言摘要
- 内部函数和外部函数
- 变量存储类别
- ⑨数组
- 指针
- 结构体
- 联合体(共用体)
- 预处理器
- 预处理器的工作原理
- 预处理指令
- 宏定义
- 简单的宏
- 带参数的宏
- 预定义宏
- 文件包含
- 条件编译
- 内存中的数据
- C语言读文件和写文件
- JNI知识点总结
- 前情回顾
- JNI规范
- jni开发
- jni开发中常见的错误
- JNI实战演练
- C++(CPP)在Android开发中的应用
- 掘金网友总结的音视频开发知识
- 音视频学习一、C 语言入门
- 1.程序结构
- 2. 基本语法
- 3. 数据类型
- 4. 变量
- 5. 常量
- 6. 存储类型关键字
- 7. 运算符
- 8. 判断
- 9. 循环
- 10. 函数
- 11. 作用域规则
- 12. 数组
- 13. 枚举
- 14. 指针
- 15. 函数指针与回调函数
- 16. 字符串
- 17. 结构体
- 18. 共用体
- 19. typedef
- 20. 输入 & 输出
- 21.文件读写
- 22. 预处理器
- 23.头文件
- 24. 强制类型转换
- 25. 错误处理
- 26. 递归
- 27. 可变参数
- 28. 内存管理
- 29. 命令行参数
- 总结
- 音视频学习二 、C++ 语言入门
- 1. 基本语法
- 2. C++ 关键字
- 3. 数据类型
- 4. 变量类型
- 5. 变量作用域
- 6. 常量
- 7. 修饰符类型
- 8. 存储类
- 9. 运算符
- 10. 循环
- 11. 判断
- 12. 函数
- 13. 数学运算
- 14. 数组
- 15. 字符串
- 16. 指针
- 17. 引用
- 18. 日期 & 时间
- 19. 输入输出
- 20. 数据结构
- 21. 类 & 对象
- 22. 继承
- 23. 重载运算符和重载函数
- 24. 多态
- 25. 数据封装
- 26. 接口(抽象类)
- 27. 文件和流
- 28. 异常处理
- 29. 动态内存
- 30. 命名空间
- 31. 预处理器
- 32. 多线程
- 总结
- 音视频学习 (三) JNI 从入门到掌握
- 音视频学习 (四) 交叉编译动态库、静态库的入门学习
- 音视频学习 (五) Shell 脚本入门
- 音视频学习 (六) 一键编译 32/64 位 FFmpeg 4.2.2
- 音视频学习 (七) 掌握音频基础知识并使用 AudioTrack、OpenSL ES 渲染 PCM 数据
- 音视频学习 (八) 掌握视频基础知识并使用 OpenGL ES 2.0 渲染 YUV 数据
- 音视频学习 (九) 从 0 ~ 1 开发一款 Android 端播放器(支持多协议网络拉流/本地文件)
- 音视频学习 (十) 基于 Nginx 搭建(rtmp、http)直播服务器
- 音视频学习 (十一) Android 端实现 rtmp 推流
- 音视频学习 (十二) 基于 FFmpeg + OpenSLES 实现音频万能播放器
- 音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)