C语言关键字
static 全局变量和函数:改变作用域,只有本源文件可见,别的源文件不可见。static 局部变量:该变量存放在静态数据区,其生命周期一直持续到整个程序执行结束,只初始化一次,值一直保持。
参看 http://www.cnblogs.com/dolphin0520/archive/2011/04/20/2022701.html
extern 变量或函数:此变量/函数是在别处定义的,要在此处引用。
检查外部类型(来自《C Traps and Pitfalls》)
一个文件中定义:char filename[] = "etc/passwd"; /* 字符数组 */
另一个文件声明:extern char *filename; /* 只是指针 */
这是不行的,类型不一致。修改如下:
char *filename = "etc/passwd"; /* 文件1 */
extern char *filename; /* 文件2 */
或都是filename[]
const 关键字并不真正表示常量,只是限制改动而已。
const int * p; /* 不能修改p指向的值 */
int * const p = &n; /* 指针p不能动 */
typedef char *pchar;
const pchar cstr;
cstr真正类型是什么?
const char *cstr;// wrong
const修饰的是pchar的类型,一个指针
char *const cstr;// right
volatile 变量:编译器对访问该变量的代码就不再进行优化,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。
参看 http://www.cppblog.com/mzty/archive/2006/08/08/10959.html
register 变量:编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。
但有条件限制,如register变量必须是能被CPU所接受的类型、只有局部自动变量和形式参数可以作为寄存器变量等。
参看 http://zqwt.012.blog.163.com/blog/static/1204468420107745836163/
页:
[1]