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整个是一个完整的声明。
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整个是一个完整的声明。
相关文章推荐
- C语言复杂声明语法
- LNMP +Xcache 笔记 【转】 ---里面问题参考其他近期文章
- 水滴石穿C语言之声明的语法
- [C专家]分析C语言声明——只有编译器才会喜欢的语法
- 理解C语言中指针的声明以及复杂声明的语法
- 关于 Web开发中的请求重定向和内部转发的区别 (声明:文章有 截取其他博客的内容)
- 内容大概是讲C语言中的不完善之处和C语言中语法欺骗性之类的 求一篇讲C语言的文章(可能是书)
- 水滴石穿C语言之声明的语法
- 理解C语言中指针的声明以及复杂声明的语法
- 使用C语言来写一个动态图形程序(像万花筒)(参考了网络上的名为细胞游戏的文章)
- C编译器剖析_3.3 语法分析_C语言的外部声明(1)
- 黑马程序员————C语言基本语法(数组、字符串、指针、其他数据类型)
- 从C语言的变量声明到Objective-C中的Block语法
- orm查询语法参考文章
- C语言声明语法
- C编译器剖析_3.3 语法分析_C语言的外部声明(3)
- readelf工具深入剖析(入门概念请参考其他文章)
- 看Struts2技术内幕,对于书中提出的问题,参考其他前辈的文章所写
- C语言特殊语法系列文章
- C编译器剖析_3.3 语法分析_C语言的外部声明(2)