【嵌入式Linux驱动开发】C语言知识(汇总版)

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循环尽量都加上大花括号!
发布了702 篇原创文章 · 获赞 1154 · 访问量 81万+

猜你喜欢

转载自blog.csdn.net/ReCclay/article/details/104978067