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

推荐订阅源

G
GRAHAM CLULEY
V
V2EX
WordPress大学
WordPress大学
博客园 - Franky
Last Week in AI
Last Week in AI
博客园 - 司徒正美
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
V
Visual Studio Blog
C
CERT Recently Published Vulnerability Notes
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
Attack and Defense Labs
Attack and Defense Labs
腾讯CDC
The Hacker News
The Hacker News
Hugging Face - Blog
Hugging Face - Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
J
Java Code Geeks
人人都是产品经理
人人都是产品经理
阮一峰的网络日志
阮一峰的网络日志
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
A
Arctic Wolf
量子位
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
N
News and Events Feed by Topic
雷峰网
雷峰网
博客园_首页
Google Online Security Blog
Google Online Security Blog
Spread Privacy
Spread Privacy
罗磊的独立博客
H
Hacker News: Front Page
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
TaoSecurity Blog
TaoSecurity Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
IT之家
IT之家
The Cloudflare Blog
爱范儿
爱范儿
博客园 - 叶小钗
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell

洛屿的小站

一种简单的卡尔曼滤波器设计 Cadence - 应律而动,落指成音 Zephyr - 聆风之息,为你而奏 不改一行插件代码,实现消息优先级与阻断 洛玖定时任务系统 在 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++关键字 C++药品管理系统 Bi-LSTM(Attention)的PyTorch实现 C语言实现波士顿房价预测 easy库的使用 edgeboardFZ3A相关问题 Predict.py的编写 Paddle环境搭建 百度Paddle模型训练 GMD09601-0.96OLED显示屏 【LeetCode 1617】统计子树中城市之间最大距离 C语言学习相关 STM32阵列按键 CH32(F10X F20X) 最短路 拓扑排序
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语言中非常常见和有用的关键字

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 洛屿的小站

打赏

  • wechat

    wechat

  • alipay

    alipay