static
- static全局变量与普通的全局变量区别:
- static全局变量作用域仅仅是本文件,而全局变量可以在其他源文件通过extern引用!
- static局部变量和普通局部变量区别:
- static局部变量只被初始化一次,下一次依据上一次结果值;
- static函数与普通函数区别:
- static函数作用域仅仅是本文件,而不带static函数可以在其他源文件通过extern引用!
volatile
- ①、编译器很聪明,会帮我们做些优化,比如:
int a;
a = 0; // 这句话可以优化掉,不影响 a 的结果
a = 1;
- ② 有时候编译器会自作聪明,比如:
int *p = ioremap(xxxx, 4); // GPIO 寄存器的地址
*p = 0; // 点灯,但是这句话被优化掉了
*p = 1; // 灭灯
- ③ 对于上面的情况,为了避免编译器自动优化,需要加上 volatile,告诉它“这是容易出错
的,别乱优化”:
volatile int *p = ioremap(xxxx, 4); // GPIO 寄存器的地址
*p = 0; // 点灯,这句话不会被优化掉
*p = 1; // 灭灯
- 关于volatile更多详细介绍,可参考这里
其他
- 遇上for循环尽量都加上大花括号!