标签:
6.9.1 函数定义
语法
1、function-definition:
declaration-specifiers declarator declaration-listopt compound-statement
declaration-list:
declaration
declaration-list declaration
约束
2、在一个函数定义中所声明的标识符(它是函数名)应该是一个函数类型,它通过函数定义的声明符部分指定。[注:这样的目的是在一个函数定义中的类型类别不能从一个typedef继承:
typedef int F(void); // 类型F是一个“返回int,不带有形参的函数” F f, g; // f和g都具有与F相兼容的类型 F f { /* ... */ } // 错误:语法/约束错误 F g() { /* ... */ } // 错误:将g声明为返回一个函数 int f(void) { /* ... */ } // 正确:f具有与F相兼容的类型 int g() { /* ... */ } // 正确:g具有与F相兼容的类型 F *e(void) { /* ... */ } // e返回指向一个函数的指针 F *((e))(void) { /* ... */ } // 与上述相同,不用去管圆括号 int (*fp)(void); // fp指向具有类型F的一个函数 F *fp; // fp指向一个具有类型F的函数
]
3、一个函数的返回类型应该是void或一个完整的对象类型,但不能是数组类型。
4、如果存在存储类说明符,那么在声明说明符中应该要么是extern,要么是static。
5、如果声明符包含一个形参类型列表,那么每个形参的声明应该包含一个标识符,除了一个形参列表由一单个void类型形参构成的特殊情况,在这种情况下,不应该有一个标识符。后面不应该跟着任何声明列表。
6、如果声明符包含了一个标识符列表,那么在声明列表中的每个声明应该至少具有一个声明符,那些声明符应该尽从声明列表声明标识符,并且标识符列表中的每个标识符应该被声明。被声明为一个typedef名的一个标识符不应该重新声明为一个形参。在声明列表中的声明不应该包含除了register之外的其它存储类说明符,并且不能包含初始化。
ISO/IEC 9899:2011 条款6.9.1——函数定义
标签:
原文地址:http://www.cnblogs.com/zenny-chen/p/5123020.html