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 是包含局部变量声明、对在外部声明的项的引用和语句的函数体。

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

请参见

概念

函数 (C)