Share via


C 函数定义

函数定义指定函数的名称、函数期望接收的参数的类型和数量以及函数的返回类型。 函数定义还包括带有局部变量的声明的函数体和确定函数行为的语句。

语法

translation-unit:
external-declaration
translation-unit external-declaration

external-declaration:/* 只允许在外部(文件)范围内 */
function-definition
declaration

function-definition:
declaration-specifiersoptattribute-seqoptdeclaratordeclaration-listoptcompound-statement

/* attribute-seq 为 Microsoft 专用 */

原型参数为:

declaration-specifiers:
storage-class-specifierdeclaration-specifiersopt
type-specifierdeclaration-specifiersopt
type-qualifierdeclaration-specifiersopt

declaration-list:
declaration
declaration-list declaration

declarator:
pointeroptdirect-declarator

direct-declarator:/* 函数声明符 */
direct-declarator(parameter-type-list) /* 新样式声明符 */
direct-declarator(identifier-listopt) /* 已过时样式声明符 */

定义中的参数列表使用以下语法:

parameter-type-list:/* 参数列表 */
parameter-list
parameter-list , ...

parameter-list:
parameter-declaration
parameter-list , parameter-declaration

parameter-declaration:
declaration-specifiers declarator
declaration-specifiersabstract-declaratoropt

旧式函数定义中的参数列表使用以下语法:

identifier-list:/* 在旧式函数定义和声明中使用 */
identifier
identifier-list , identifier

函数体的语法为:

compound-statement:
{declaration-listoptstatement-listopt}

唯一可以修改函数声明的存储类说明符是 externstaticextern 说明符表示可以从其他文件引用函数;即,将函数名导出到链接器。 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 是包含局部变量声明、对在外部声明的项的引用和语句的函数体。

函数特性存储类返回类型参数函数体节详细地描述了函数定义的组成部分。

请参阅

函数