C 函数定义
函数定义指定函数的名称、函数期望接收的参数的类型和数量以及函数的返回类型。 函数定义还包括带有局部变量的声明的函数体和确定函数行为的语句。
语法
translation-unit
:
external-declaration
translation-unit
external-declaration
external-declaration
:/* 只允许在外部(文件)范围内 */
function-definition
declaration
function-definition
:
declaration-specifiers
opt attribute-seq
opt declarator
declaration-list
opt compound-statement
/* attribute-seq
为 Microsoft 专用 */
原型参数为:
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
opt
type-specifier
declaration-specifiers
opt
type-qualifier
declaration-specifiers
opt
declaration-list
:
declaration
declaration-list
declaration
declarator
:
pointer
opt direct-declarator
direct-declarator
:/* 函数声明符 */
direct-declarator
(
parameter-type-list
)
/* 新样式声明符 */
direct-declarator
(
identifier-list
opt )
/* 弃用样式声明符 */
定义中的参数列表使用以下语法:
parameter-type-list
:/* 参数列表 */
parameter-list
parameter-list
, ...
parameter-list
:
parameter-declaration
parameter-list
,
parameter-declaration
parameter-declaration
:
declaration-specifiers
declarator
declaration-specifiers
abstract-declarator
opt
旧式函数定义中的参数列表使用以下语法:
identifier-list
:/* 在旧式函数定义和声明中使用 */
identifier
identifier-list
,
identifier
函数体的语法为:
compound-statement
:
{
declaration-list
opt statement-list
opt }
唯一可以修改函数声明的存储类说明符是 extern
和 static
。 extern
说明符表示可以从其他文件引用函数;即,将函数名导出到链接器。 static
说明符表示不能从其他文件引用函数;也就是说,链接器不会导出名称。 如果存储类未在函数定义中出现,则假定 extern
。 在任何情况下,从定义点到文件的末尾函数始终可见。
可选的 declaration-specifiers
和必需的 declarator
共同指定函数的返回类型和名称。 declarator
是用来命名函数的标识符与函数名后面的括号的组合。 可选的 attribute-seq
非终止符是在函数特性中定义的 Microsoft 专用功能。
direct-declarator
(在 declarator
语法中)指定要定义的函数的名称及其参数的标识符。 如果 direct-declarator
包括 parameter-type-list
,则该列表将指定所有参数的类型。 此类声明符还用作以后对函数进行调用时的函数原型。
函数定义中 declaration-list
内的 declaration
不能包含除 register
以外的 storage-class-specifier
。 只有当为 int
类型的值指定 register
存储类时,才能省略 declaration-specifiers
语法中的 type-specifier
。
compound-statement
是包含局部变量声明、对在外部声明的项的引用和语句的函数体。
函数特性、存储类、返回类型、参数和函数体节详细地描述了函数定义的组成部分。