参数是由函数调用传递给函数的值的名称。 参数是函数期望接收的值。 在函数原型中,函数名称后面的括号包含函数参数及其类型的完整列表。 参数声明指定参数中存储的值的类型、大小和标识符。
语法
function-definition:
declaration-specifiers
选择attribute-seq选择declaratordeclaration-list选择compound-statement
/*
attribute-seq 特定于Microsoft */
declarator:
pointer
选择direct-declarator
direct-declarator:/* 函数声明符 */
direct-declarator
(
parameter-type-list
) /* 新样式声明符 */
direct-declarator
(
identifier-list
选择) /* 过时样式声明符 */
parameter-type-list:/* 参数列表 */
parameter-list
parameter-list
, ...
parameter-list:
parameter-declaration
parameter-list
,
parameter-declaration
parameter-declaration:
declaration-specifiers
declarator
declaration-specifiers
abstract-declarator
选择
parameter-type-list这是用逗号分隔的参数声明序列。 参数列表中的每个参数的形式如下所示:
register选择type-specifierdeclarator选择
使用特性生成的错误声明的 auto 函数参数。 参数的标识符在函数正文中使用,以引用传递给函数的值。 可以在原型中命名参数,但名称在声明末尾超出范围。 这意味着可以在函数定义中以相同的方式或不同的方式分配参数名称。 这些标识符不能在函数体的最外层块中重新定义,但它们可以在内部嵌套块中重新定义,就像参数列表是封闭块一样。
每个标识符 parameter-type-list 前面必须有相应的类型说明符,如以下示例所示:
void new( double x, double y, double z )
{
/* Function body here */
}
如果参数列表中至少有一个参数发生,则列表可以以逗号结尾,后跟三个句点(, ...)。 此构造称为“省略号表示法”,表示函数的参数数可变。 有关详细信息,请参阅 具有可变参数数的调用。 但是,对函数的调用必须至少具有与最后一个逗号之前有参数一样多的参数。
如果未将任何参数传递给函数,参数列表将替换为关键字 void。 这种用法 void 不同于其用作类型说明符的使用。
参数的顺序和类型(包括省略号表示法的任何用法)在所有函数声明(如果有)和函数定义中必须相同。 通常算术转换后的参数类型必须与相应参数的类型兼容。 (有关算术转换的信息,请参阅 常规算术转换 。)不检查省略号后面的参数。 参数可以具有任何基本、结构、联合、指针或数组类型。
如有必要,编译器会单独对每个参数和每个参数执行常规算术转换。 转换后,没有参数比一个 int短,并且没有参数具有 float 类型,除非在原型中显式指定 float 参数类型。 例如,声明参数的效果 char 与声明参数 int的效果相同。