码迷,mamicode.com
首页 > 其他好文 > 详细

ISO/IEC 9899:2011 条款6.9.1——函数定义

时间:2016-01-12 01:13:49      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!