引言

在 C 语言中,「声明」是一类特殊的语句,它赋一个标识符予确定的含义。

例如,当我们写下 int x; 这个语句的时候,我们表达的意思是「 x 是一个 int 类型的变量」。

我们可以声明「函数」,「数组」,「指针」,以及这些东西互相修饰之后得到的东西,比如说:

在这篇文章中,我们并不打算严肃或者严谨地讲 C 语言的声明语法,我们只是尝试通过几个例子来帮助读者理解这个概念。

语法

为了提取出上述的这些含义,解析器将我们在 .c 文件或者 .h 文件写的内容读取到内存中,但是这样做之后,类似于 int x; 这样的语句在解析器看来只是字符串。

为了从 int x; 这样的字符串中提取出「x 是一个 int 类型的变量」这样的信息,解析器需要依照一些定义好的语法规则对字符串进行解析,在此过程中将字符串转换为专门用来描述语法结构的对象。

语法规则,或称语法产生式,有严谨的描述方法。但是在下文中,我们只会用不严谨的方式来描述 C 语言中的声明语法。

一个声明子可以是下述形式之一:

  1. 标识符
  2. ( 声明子 )
  3. * 声明子