惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
GbyAI
GbyAI
L
LangChain Blog
Vercel News
Vercel News
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
T
Threat Research - Cisco Blogs
T
Threatpost
Scott Helme
Scott Helme
T
Tailwind CSS Blog
Latest news
Latest news
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
The Register - Security
The Register - Security
罗磊的独立博客
P
Proofpoint News Feed
腾讯CDC
S
Schneier on Security
雷峰网
雷峰网
A
About on SuperTechFans
T
Tenable Blog
F
Full Disclosure
Cyberwarzone
Cyberwarzone
博客园_首页
有赞技术团队
有赞技术团队
K
Kaspersky official blog

文章列表

不改一行插件代码,实现消息优先级与阻断 洛玖定时任务系统 在 butterfly 主题中添加首页点集动画(基于p2line项目) 你好,2026 stm32f4xx-ads1256驱动 stm32f4xx-ad9854并行驱动 主动式网站状态监测实现及其应用 右键菜单加入用Trae打开文件和文件夹 三角洲行动ID映射表 洛玖SDK说明 为网页文章开头添加原文连接 Hexo-Butterfly主题在主页添加GitHub贡献日历 Proteus中555定时器仿真问题 装饰器 洛玖开发日记 STS3032舵机获取力矩输出 kotlin网页前后端那些事 mspm0g3507-ad9850 奇怪的bug Paddle模型转PaddleLite 人工智能考核 构建一个yolov3网络 yolo和paddle模型常见输出参数 PaddleDetection 随便写的一些东西 实验室C语言第一次考核题目讲解及相关代码解读 C语言神经网络房价预测系统 C、C++数组,指针,指针数组,数组指针的区别 C、C++的大括号是必须的部分吗? C、C++预处理详解 C、C++存储类型关键字详解 C、C++控制语句关键字详解 C、C++数据类型关键字详解
C、C++其他关键字详解
洛屿 · 2023-10-10 · via

其它关键字

const

  • 作用const 用于声明常量,表示变量的值不可被修改。
  • 示例
1
2
const int age = 30; // 定义一个不可修改的整数常量
age = 35; // 这里会导致编译错误,因为常量不可被修改

sizeof

  • 作用sizeof 用于获取数据类型或变量占用的内存字节数。
  • 示例
1
2
3
int x = 10;
size_t size = sizeof(x); // 获取整数变量 x 占用的字节数
printf("x 占用的字节数为: %zu\n", size);

typedef

  • 作用typedef 用于创建自定义数据类型的别名。
  • 示例
1
2
typedef int Age; // 创建一个名为 Age 的整数别名
Age myAge = 25; // 使用 Age 别名定义整数变量
  • 另一个示例:
1
2
3
4
5
6
7
8
typedef struct {
int x;
int y;
} Point;

Point p;
p.x = 5;
// 使用自定义的数据类型别名 Point 来声明变量

volatile

  • 作用volatile 用于告诉编译器该变量的值可能在编译器控制之外的情况下发生变化(被修改),因此不应进行优化。
  • 示例
1
2
3
4
5
volatile int sensorValue; // 定义一个用于传感器值的变量
while (1) {
int reading = sensorValue; // 读取传感器值
// 这里编译器不会对 reading 进行优化,以确保每次都读取最新值
}

何为“不应进行优化?”

具体来说,不进行优化意味着编译器不会对这些变量的读取和写入操作进行任何形式的优化,以确保它们在程序中的每次引用都反映其实际状态,而不会被优化掉或重排序。

通常情况下,volatile 用于描述那些可能被外部因素更改的变量,如硬件寄存器多线程程序中的共享变量

这些变量可能在程序之外的上下文中被更改,例如硬件设备可能会更新某个寄存器的值,或者在多线程环境中,一个线程可能会更改另一个线程正在访问的共享变量。

因此,编译器不能对这些变量的操作进行优化,以确保程序的行为是可预测的。

1
2
3
4
5
6
7
volatile int sensorValue; // 定义一个用于传感器值的 volatile 变量

while (1) {
int reading = sensorValue; // 读取传感器值
// 编译器不会优化这里的 reading,以确保每次都读取最新的传感器值
// 这是因为 sensorValue 可能在程序之外的上下文中被更改
}

如果不将 sensorValue变量声明为 volatile,编译器可能会认为 reading 的值在循环中不会改变,从而进行优化,导致不正确的行为。

总之,volatile 关键字用于告诉编译器不要对其修饰的变量进行任何优化,以确保这些变量的值在程序中的每次引用都是最新的。

goto

  • 作用goto 用于实现无条件跳转到程序中的标签位置,但通常不推荐使用(goto语句的随性跳转会极大的降低代码可读性,对维护不利,且可能造成逻辑混乱)。
  • 示例
1
2
3
4
5
6
7
8
9
for (int i = 1; i <= 10; i++) {
if (i == 5) {
goto jump_here; // 无条件跳转到标签位置
}
printf("%d\n", i);
}

jump_here: // 标签位置
printf("Jumped here!\n");

总结

一般来说,应该尽量避免使用 goto,因为它可以导致代码难以理解和维护

初学者通常不需要使用 volatile,而应当谨慎使用 typedef

constsizeof` 是C语言中非常常见和有用的关键字