Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110915
  • 博文数量: 63
  • 博客积分: 1468
  • 博客等级: 上尉
  • 技术积分: 541
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-16 15:32
文章分类

全部博文(63)

文章存档

2011年(1)

2009年(1)

2008年(61)

我的朋友

分类: C/C++

2008-12-22 12:55:20

static:修饰符:修饰变量,函数。作用域:变量仅仅在本文件可见,函数在本文件可以被调用。static在函数内部定义的话,分配在堆中,数值保存在data段,而不是在栈中,而且只赋值一次。
extern:修饰符:修饰变量,函数。修饰变量时候,变量的声明在外面,修饰函数的时候,如果函数已经声明,则作用不是很大。
const:修饰符:修饰变量,函数。修饰变量时候,不能被重复赋值,只能放在只读段中。修饰函数时候,表明函数的返回值必须为常数。
volatile:(嵌入式程序员必须掌握的)volatile最初的意思是表示汽油容易挥发,在c中的作用大概有两点(1)表示变量是易失的,易变的。(2)强制访存操作,防止编译器去优化,告诉编译器每次必须去内存中取值,而不是从寄存器或者缓存。
const int nValue; //nValue是const
const char *pContent; //*pContent是const, pContent可变
const (char *) pContent;//pContent是const,*pContent可变
char* const pContent; //pContent是const,*pContent可变
const char* const pContent; //pContent和*pContent都是const
int const nValue; // nValue是const
char const * pContent;// *pContent是const, pContent可变
(char *) const pContent;//pContent是const,*pContent可变
char* const pContent;// pContent是const,*pContent可变
char const* const pContent;// pContent和*pContent都是const
static和extern是specifier即限定符
const和volatile是qualifier即修饰符,他们在grammar上是有区别的


“const (char *) p”根本不符合C语法


static和extern要从作用域,生存周期和linkage三个方面来考虑
const的语义是只读,即不要通过某左值修改其内容,但是可能通过其它左值修改,放在只读段只是某种实现方式

volatile提示编译器,由于异步操作,不要caching。。。


根据C的grammar
declaration-specifiers:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt
function-specifier declaration-specifiersopt
对于x的声明int const static x;type-specifier int,type-qualifier const和storage-class-specifier static的顺序语法上是任意的。语义上是相同的。


根据C的grammar
declarator:
pointeropt direct-declarator
pointer:
* type-qualifier-listopt
* type-qualifier-listopt pointer

可见int const * x与int * const x的不同:第一个const被归约为declaration-specifier,而第二个被归约为type-qualifier-list.....

“const (char *) p”根本不符合C语法
阅读(515) | 评论(0) | 转发(0) |
0

上一篇:Under Pressure

下一篇:GNU C 之 strlen()

给主人留下些什么吧!~~