函数定义、函数声明、函数原型

函数定义、函数声明、函数原型;变量声明、变量定义;类型声明、类型定义

1.函数定义、函数声明、函数原型

函数声明中不但包含“函数原型声明”,也包含“函数定义”和老式的“函数类型声明”。

  • 函数类型声明(Function type declaration)。声明了函数名是一个函数及其返回值的类型。(没对参数进行描述)
  • 函数原型式的函数类型声明:声明了函数名返回值的类型参数的类型(和个数)
  • 函数定义:写了函数体的函数声明。不过函数体结束不带;

函数定义带有函数体,函数声明≈函数原型
 

  • 函数声明宣示了函数的名字参数类型个数返回值类型,它就叫函数原型式声明,即函数原型
  • 只有带函数体的声明才叫定义
  • 函数定义本身就是一种函数声明只不过其函数体后不加;
`不带函数体的函数声明`应该如何称呼呢?在C语言中,它们叫被做“函数类型
声明”(Function type declaration)。`函数类型声明`最主要的特点是声明了
`函数名`是一个函数及其`返回值的类型`,如果也声明了参数的类型,则是
`函数原型`式的函数类型声明。现代的C语言的函数定义和函数类型声明
都采用函数原型式的风格,C99把旧的非原型形式视为过时。
  • 函数原型后面由分号;结尾。
  • 由于有 Old Style C 语法的存在,并非所有函数声明都包含完整的函数原型void threeline();这个声明并没有明确指出参数类型和个数,所以不算函数原型。

函数原型式声明:

int fun(int a, int b); // 函数名字fun,返回类型 int,有2个int 参数

函数原型式声明:

int fun(int, int); // 函数名字fun,返回类型 int,有2个int 参数

函数原型式声明:

fun(int, int); // 函数名字fun,默认返回类型(其实也是int),有2个int 参数

例如函数声明和定义:

int fun(int a, int b) 
{
	return a+b;
}// 花括号里是函数体,结束处没有分号,有形参名。

在这里插入图片描述

知识点:函数定义也具有对函数名的类型加以说明的效果,因此从这个意义上来说,函数定义也是一种对函数类型的说明。这种办法可以检查出函数调用时在参数个数和类型方面的错误。
 
但是,用这种办法说明函数名并不好,因为这样做在编程时还需要考虑应该把哪个函数定义写在前面,哪个写在后面的问题。假如函数A调用函数B,函数B调用函数C,函数C又调用函数A,究竟如何安排函数定义的顺序就会让人感到无所适从。此外这种办法也不利于代码的组织,在由多个源文件组成的源程序时,这种写法就更会捉襟见肘、漏洞百出。因此,在1990年,C标准借鉴C++语言规定了一种新的说明函数名的方法,这就是函数原型(Function Propotype)式说明函数类型的方法。

2.变量声明、变量定义

  • 只有分配存储空间的变量声明才叫变量定义
    其实函数也是一样,编译器只有见到函数定义才会生成指令,而指令在程序运行时当然也要占存储空间。那么没有函数体的函数声明有什么用呢?它为编译器提供了有用的信息,编译器在翻译代码的过程中,只有见到函数原型(不管带不带函数体)之后才知道这个函数的名字参数类型返回值,这样碰到函数调用时才知道怎么生成相应的指令,所以函数原型必须出现在函数调用之前,这也是遵循“先声明后使用”的原则。

3.类型声明、类型定义

声明一个类型是不分配存储空间的

类型声明==“类型定义”
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值