C语言声明详解归类.pdfVIP

  • 0
  • 0
  • 约4.02千字
  • 约 5页
  • 2021-12-10 发布于福建
  • 举报
人们常说, C 语言的声明太复杂了,的确,这也是 C 语言饱受批评的地方之一。不过, 笔者认为,真正要受到批评的不是语言本身,而是那些传播者。传播者们通常都有一个共识: 讲述要由浅入深。作为原则,笔者并非要反对它,毕竟笔者对 C 语言的学习,也经历了相同 的过程。但是,由浅入深并不意味着一切从简,以偏盖全。计算机语言不同于数学理论(虽 然它的确根植于数学,与数学密不可分) ,数学理论是一种循序渐进的过程,后面的理论以前 面的理论为基础。但 C 语言归根说底,就是一堆语言规则而已,应该让学习者一开始就全面 且详细地了解它,而不是象现在某些教材所做的那样,只说一部分,不说另一部分,以为这 就是由浅入深了,实际上这是以偏盖全。 语言如此,声明作为 C 语言的一部分更是如此。我们最常见到的对声明的描述是这样的: 存储类别 类型限定词 类型 标识符 这种说明会给人们一种暗示: C 语言的声明是静止的、死板的,什么声明都能够以这个为 基础,往上一套就 OK 了。事实真的如此吗?说句心里话,笔者也祈祷事实真的如此,这样世 界就简单多了、清静多了。但别忘了, 这个世界总是让人事与愿违的。 实际上, C 的声明的组 织形式是以嵌套为基础的,是用嵌套声明组织起来的,并非象上面所述那么死板,存储类说 明符一定得放在限定词前面吗?类型说明符一定要紧贴标识符吗?不! C 标准从来没有这样说 过!下面来看一看 C89 对声明的形式是如何规定的: 声明: 声明说明符 初始化声明符表 opt [opt 的意思是 option,可选 ] 其中声明说明符由以下三项构成: 声明说明符: 存储类说明符 声明说明符 opt 类型说明符 声明说明符 opt 类型限定符 声明说明符 opt 在这里, 一个声明说明符可以包含另一个声明说明符, 这就是声明的嵌套,这种嵌套贯穿 于整个声明之中,今天我们看来一个非常简单的声明,其实就是由多个声明嵌套组成的,例 如: 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; 这无所谓,跟原声明是一样的。再举一个有趣的例子: const int *p; 与 int const *p; 有些人会对后面一种形式感到困惑,因为他一直以来学习的都是那种死板的形式,因此他 无法理解为什么那个 const 可以放在 int 的后面。实际上对于标准来说,这是再正常不过的行 为了。 上面举的例子是变量的声明,函数的声明也同样道理,例如: static const int func(void); int main(void) { int static const (*p)(void); p=func; return 0; } const int static func(void) { return

文档评论(0)

1亿VIP精品文档

相关文档