声明概述

“说明”指定解释和属性设置标识符。 还会导致存储为该标识符或函数保留命名该对象的声明名为 “定义”。变量、函数和类型的 C 声明具有此语法:

语法

  • declaration:
    声明说明符 init 公告列表opt**;**

  • 声明说明符:
    属性序列的存储类说明符 opt

    声明说明符 opt

                                  属性序列 的/*opt 是特定于 Microsoft 的 *

    类型说明符声明说明符 opt

    类型限定符声明说明符 opt

  • init 公告列表:
    init 声明

    init 公告列表init 声明

  • init 声明:
    声明

    声明 = 初始值设定项

备注

declaration 的此语法在下面的节中重复使用。以下各节中的语法从非终止符号的 declarator 通常启动。

init 公告列表的 声明包含一个名为的标识符; init 对初始值设定项的缩写词。 init 公告列表 是声明,每个可以有不同的类型信息,或初始值设定项逗号分隔的顺序或两个。 declarator 包含标识符,如果有,声明。 指示实体类型的至少连接、存储持续时间和分部声明表示非终止符号 的声明说明符 由类型和存储类说明符序列。 因此,声明由存储类说明符、类型说明符,类型限定符,声明和初始值设定项组成的组合。

声明只能在 属性序列包含列表的一个或多个可选特性; 序列的 是对序列的缩写词。 这些特定于 Microsoft 的属性执行各种功能,详细讨论本书中。 有关这些属性的列表,请参见 C 语言语法摘要

以变量声明的一般形式, 类型 说明符给定变量的数据类型。 ,当 const 或 volatile时,修改该类型这种 类型说明符 可以是 ",。 declarator 退出,能修改的变量的名称声明数组或指针类型。 例如,

int const *fp;

声明变量被命名为 fp 作为指针传递给个无法更改 (const) int 值。 除了可定义更多变量声明中使用多个声明,以逗号分隔。

声明必须至少有一个声明,或其类型说明符必须声明结构标记、联合枚举的标记或成员。 声明提供有关标识符的其余的信息。 声明分别为可以修改使用括号的标识符 ([]),星号 (*),或括号 (()) 声明数组、指针或函数类型,。 在声明简单变量 (例如字符、整数和浮点项目) 时,或者简单变量结构和联合, declarator 是标识符。 有关声明的更多信息,请参见 声明和变量声明

所有定义是隐式声明,但是,并非所有的声明和定义。 例如,从 extern 存储类说明符启动的变量声明的 “引用”,而不是 “定义”声明。 如果外部变量将引用,在定义之前,或者,如果在之外的另一个源文件中定义的位置时, extern 声明是必需的。 “引用”声明没有分配存储区,也不能在声明变量初始化为。

存储类或类型 (或两者) 在变量声明需要。 除 __declspec,仅使用存储类说明符在声明允许,并不是所有的存储类说明符在每个上下文允许的。 __declspec 存储类允许使用其他存储类说明符,因此,它允许多次。 声明影响的存储类说明符存储方式。声明的项目并初始化,因此,程序的部分能引用该项目。

在 C 中定义的 存储类说明符 位置包括 自动、 extern、 注册静态和 typedef。 此外, Microsoft C 包括 存储类说明符 终端 __declspec。 所有 存储类说明符 位置,但 typedef 和 __declspec 在 存储类讨论。 有关 typedef的信息,请参见 Typedef 声明 。 有关 __declspec的信息,请参见 扩展的存储类的属性

声明的位置在源程序中的和存在或缺少该变量的其他声明是在确定生存期最重要的因素变量。 只可以有多个 redeclarations,但一个定义。 但是,定义可以出现在多个翻译单元。 对于具有内部联接的对象,因为在内部链接对象被翻译单元,是唯一的,此规则分别向每个翻译单元。 为了与外部联接的对象,此规则适用于整个过程。 请参见 生存期、大小、可见性和连接 有关可见性的更多信息。

类型说明符提供有关标识符的数据类型的一些信息。 默认类型说明符是 int。 有关更多信息,请参见 类型说明符。 类型说明符可能还定义类型标记,结构和联合组件名称和枚举常量。 有关更多信息 枚举声明请参见、 结构声明联合声明

有两种 类型限定符 位置: const 和 volatile。 这些限定符指定相关的,所以仅当访问该类型对象是左值时类型的其他属性。 有关 const 和 volatile的更多信息,请参见 类型限定符。 有关左值的定义,请参见 左值和 R 值表达式

请参见

概念

声明和类型