
c
BobChill
这个作者很懒,什么都没留下…
展开
-
高质量c/c++代码——不用非volatile变量引用volatile变量
被volatile修饰的变量,每次都去内存中取值,避免了编译器优化,不从寄存器中取。但是不能用一个非volatile的变量去引用volatile变量 错误代码 #include <stdio.h> void func(void) { static volatile int **ipp; static int *ip; static volatile int i = 0; printf("i = %d.\n", i); ipp = &ip; /* M原创 2021-11-30 16:29:12 · 2922 阅读 · 0 评论 -
高质量c/c++代码——不安全宏传参不能附带运算
错误例子: #define ABS(x) (((x) < 0) ? -(x) : (x)) void func(int n) { /* Validate that n is within the desired range */ int m = ABS(++n); /* ... */ } 这段代码的问题在于宏扩展后n会做两次运算:m = (((++n) < 0) ? -(++n) : (++n)); 正确例子: #define ABS(x) (((x) &l..原创 2021-11-28 16:31:00 · 3066 阅读 · 0 评论 -
什么是大小端
有些计算机先从低位字节开始存放,有些则先从高位字节开始存放,它们分别称为“小端(little-endian)”和“大端(big-endian)” 该问题不仅关系到通信系统,还关系到可移植性。如果一台计算机可以写数据,而另一台计算机需要读这些数据,我们就得先知道第二台主机如何理解第一台写的数据。注意,只有在按字节寻址的时候才需要考虑尾端问题,字节内部的位序与尾端没有关系。 为了解决通信的问题,T...原创 2019-01-16 17:02:55 · 1943 阅读 · 1 评论