基本上,每一个程序员都知道使用C语言可以写出可移植的程序。所谓“可移植”,无非就是在不同的设备平台,程序能够表现一致,具有相同的功能。
C语言标准
C语言代码是不可以直接被机器执行的,它在被执行之前,必须被编译器“翻译为”机器指令。一般来说,不同的设备平台上的C语言编译器在实现上都是有所差异的,为了确保这些“有差异”的编译器处理同一份C语言代码时,能够实现相同的功能,必须制定相应的
2025年08月02日
基本上,每一个程序员都知道使用C语言可以写出可移植的程序。所谓“可移植”,无非就是在不同的设备平台,程序能够表现一致,具有相同的功能。
C语言代码是不可以直接被机器执行的,它在被执行之前,必须被编译器“翻译为”机器指令。一般来说,不同的设备平台上的C语言编译器在实现上都是有所差异的,为了确保这些“有差异”的编译器处理同一份C语言代码时,能够实现相同的功能,必须制定相应的
2025年08月02日
位掩码 (Bitmask) 和标志位 (Flags) 操作是C语言中利用位运算来高效管理和查询多个布尔状态或选项的常用技术。一个整数类型的变量(通常是
2025年08月02日
虽说指针是C语言中比较复杂的语法,但是确实非常好用,因此我写过不少文章讨论C语言中的指针,相信对初学者理解指针有一定的帮助。
事实上,的确有读者私信我说看了这些文章,“总算不再畏惧指针了”。不过他同时也问了一个问题:C语言有“不透明指针(opaque pointer)”吗?要是有的话,什么样的指针才是不透明指针呢,有什么用呢?
2025年08月02日
IT之家 6 月 27 日消息,Rust 团队昨日(6 月 26 日)发布博文,宣布推出 Rust 1.88.0 版本更新,主要新增支持裸函数(naked functions),支持开发者完全控制生成的汇编代码。
IT之家援引博文介绍,裸函数不包含编译器生成的结尾和开头代码,从而支持开发者完全控制生成的汇编代码。Rust 团队表示,这比在 global_asm! 块中定义函数更为方便。
2025年08月02日
嵌入式C语言的学习和我们平时所说的C语言,虽然在代码编写上没有什么区别,但是在开发时候的思考角度却是有很大区别的。普通的C语言开发是基于电脑的,编写时候没有那么多约束;而嵌入式C语言在编写过程中要重点考虑软件、硬件、计算机原理这些。
2025年08月02日
虽说C语言是一门很成熟的编程语言,但是近些年来也是有所发展的,从早期的C89到后来的C99、C11等新标准,C语言逐步增加了许多好用的功能,例如新标准头文件“stdint.h”的添加。
如果程序员希望写出可移植的C语言程序,首先最重要的一点是不能假定位宽。C语言标准并没有明确指定的 short、int、long 等类型的位宽,因此可能在某些平台 sizeof(int) 等于 2,在其他平台 sizeof(int) 等于 4,所以如果编写的C语言代码假定 sizeof(int) 是一个固定值,显然就属于不可移植的代码。
2025年08月02日
本指南旨在为C语言开发者提供防御性编程的最佳实践,以提高代码的安全性、可靠性和可维护性。C语言由于其低级操作和手动内存管理特性,容易引入安全漏洞,如缓冲区溢出、内存泄漏和未定义行为。遵循本指南可以有效减少这些风险,防止潜在的危害,如系统崩溃、数据泄露或恶意代码执行。
2025年08月02日
在嵌入式开发中,有一些常用的C语言代码片段被认为是宝藏级别的,因为它们在处理底层硬件和优化性能方面非常有用。以下是一些常见的宝藏级别的C语言代码和解释:
1.位操作代码:
// 设置某个位为1
#define SET_BIT(reg, bit) ((reg) |= (1 << (bit)))
// 清除某个位为0
#define CLEAR_BIT(reg, bit) ((reg) &= ~(1 << (bit)))
// 切换某个位的状态
#define TOGGLE_BIT(reg, bit) ((reg) ^= (1 << (bit)))
// 读取某个位的值
#define READ_BIT(reg, bit) (((reg) >> (bit)) & 1)
2025年08月02日
你们每行代码都是对行业的侮辱!
W君在会议上直接怒吼:"你们每行代码都是对行业的侮辱!"他说得这么重,是为了点醒一群程序员。怎么回事呢?W君在监督一个小项目。任务很简单,就是写个小程序,判断从0到31这32个数字中哪些是质数。质数就是那种只能被1和自己整除的数,比如2、3、5、7这些。数字范围小,活儿不复杂。
一开始,程序员们写了段代码,用了循环。n在2到31之间循环,检查能不能被其他数整除。如果能,就不是质数;不能,就是质数。这代码理论上没问题,但效率不高。W君提醒他们别硬套老师教的方法,动动脑子想想更快的招儿。