static 用来修饰一个模块内的(某一个 C 的源程序文件)全局变量的时候
生命域不变
作用域减小,只在本模块内有效
static 用来修饰一个函数的时候
作用域减小,只在本模块内有效
33、说明下面的声明的含义:
A.
const int a; // a 是一个常数
int const a; // a 是一个常数
B.
const int *a; // a 是一个指向整型常数的指针
int * const a; // a 是一个指向整型变量的常指针
int const * a const;// a 是一个指向整型常数的常指针
C.
char *strcpy(char *strDest, const char *strSrc);
// 参数在函数内部不会被修改
const int strcmp(char *source, char *dest);
// 函数的返回值不能被修改
const int a = strcmp(xx, yy);
if(strcmp(xx,yy) != 0)
34、说明关键字 volatile 有什么含意,并给出例子。
volatile 表示被修饰的符号是易变的。告诉编译器不要随便优化我的代码!!
*一个硬件寄存器
*中断中用到的变量
*线程之间共享变量
volatile int a = 10;
while((a & 0x01) == 0);
#define P_UART_STATUS ((const volatile unsigned int *)0x88000000);
// volatile 表示硬件会修改这个寄存器的内容
// const 表示该寄存器只读,写无意义
const, volatile 同时修饰一个变量:
文章基础:
(1) “编译器一般不为 const 变量分配内存,而是将它保存在符号表中,这使得它成
为一个编译期间的值,没有了存储与读内存的操作。”
(2) volatile 的作用是“告诉编译器,i 是随时可能发生变化的,每次使用它的时候必
须从内存中取出 i 的值”。
— —《c 语言深度解剖》
一,const, volatile 含义
(1)const 含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”。
(2)volatile 的含义是“请不要做自以为是的优化,这个值可能变掉的”,而并非“你可以修
改这个值”。
二,const, volatile 的作用以及起作用的阶段
(1)const 只在编译期有用,在运行期无用