您的位置:首页 > 编程语言 > C语言/C++

c语言声明语法(参考其他文章)

2014-05-05 15:17 211 查看
C语言的声明语法本身就是小的编程语言。其基本思想为让声明符模仿标识符的最终语法。

C89对声明的形式的规定:

声明说明符 初始化声明符表opt [opt的意思是option,可选]

声明说明符:

存储类型说明符 声明说明符opt

基本类型说明符 声明说明符opt

类型限定符 声明说明符opt

声明符:

包含字符 * ,[] , ( ) 与被声明的标识符(即名称),其声明了一个新的标识符,还表示标识符是数组、指针、函数还是其他任意组合。

声明符是初始化声明符表的主体,声明符规定如下:

指针opt
直接声明符

指针opt指的是指针声明符*,要注意的是,*属于声明符,而不是声明说明符的一部分。

指针opt又包含:

* 类型限定符表opt (如:int *const p)

* 类型限定符表opt 指针 (如:const
int * const *** const ** const p;)

第二条使得指针可以嵌套,这条规定产生复杂的声明形式

直接声明符和类型限定词表的内容:

直接声明符:

标识符

(声明符)

直接声明符[常量表达式opt]

直接声明符(形式参数类型表)

直接声明符(标识符表opt)

类型限定符表:

类型限定符

类型限定符表 类型限定符

C的声明的组织形式是以嵌套为基础的,是用嵌套声明组织起来的。一个声明说明符可以包含另一个声明说明符,这就是声明的嵌套,这种嵌套贯穿于整个声明之中。

一个非常简单的声明,其实就是由多个声明嵌套组成的,例如:

static const int i=10, j=20, k=30;

变量i前面就是声明说明符部分,有三个声明说明符:static const int,static是一个存储类说明符,它属于这种形式:

static 声明说明符

static后面的声明说明符就是const int,const是一个类型限定符,这也是个嵌套,它是由

const 声明说明符

组成,最后的int是一个类型说明符,到这里已经没有嵌套了,int就是最底的一层。对于存储类说明符、类型说明符和类型限定符的排列顺序,C标准并没有规定其顺序,谁嵌套谁都可以。换言之,上面的声明可以写成: int static const i=10, j=20, k=30; 或者const int static i=10, j=20, k=30;

声明符模仿标识符思想:

我们最常见到的对声明的描述是这样的:

存储类型 基本类型 类型限定词 最终声明符(可能包含初始化列表)

在c语言中,声明的语法与解释为

基本类型 生成基本类型的东西;

而不是

类型 标识符;

生成基本类型的东西,即——声明符——或是简单的标识符,或是如同*p,a[10],或f()这样符号,表明声明变量为指向基本类型的指针,基本类型的数组,或返回基本类型的函数。

例子:

<1>const int *p;

<2>int const *p;

<3>int *const p;

由c语言的声明标准可以知道<1>与<2>是等价的,表示指向只读常量的指针,可以从让声明符模仿标识符的思想考虑,即*p 在使用时表示一个被 const
修饰的 int 型只读常量,所以p表示指向常量的指针。

对于<3>,同样 *const p 为int型,const修饰p,表示p的值不可修改,p为指针,所以为指针常量。

typedef用来声明一个别名,typedef后面的语法,是一个声明。

教材中介绍typedef的时候通常会写出如下形式:

typedef int PARA;

其中int PARA 为一个声明,声明中的标识符即为别名,其代表最终声明符,如

typedef int a[10]; (a代表a[10])

typedef void (*p)(void); (p 代表 (*p)(void) )

虽然在功能上,typedef可以看作一个跟int PARA分离的动作,但语法上typedef属于存储类声明说明符,因此严格来说,typedef int PARA整个是一个完整的声明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: