从C出发 19 --- 函数定义细节剖析


因为编译器是自上而下执行代码的,当编译到 paw2 的时候不知道是什么东西,看起来像一个函数但是前面的代码没有发现它,这个时候编译器就会报错

为了防止编译器报错

应该在调用前先声明 ,注意声明的三要素

声明的作用: 让编译器先放行,不要急着报错

如果我们声明了,但没有定义,会发生什么? 

编译器会报错,因为要调用的函数虽然声明了,但是在任何地方都找不到所对应的定义

对专业程序员来说警告就是错误


在  C 语言 里面对数据分类只有2 种,1. 整型  2. 浮点型

不可能存在一个值,这个值为 空 。 所以这里的 void 表示的并不是返回值的类型,表示的是demo 这个函数它没有返回值

这种写法也是错误   : 

void  v ;  不可能有值的类型为空

错误, demo 没有返回类型,还 return i

void 不能定义变量,非要这么写就错了 

void 在 c 语言里面就表示一种空类型,这种空类型不能用来定义变量,也没有任何值是属于空类型的


 

C 语言里面的无参函数必须使用 void 来进行参数的声明

无参函数意味着在调用的时候,调用 g 的时候不可以给参数

没有写任何参数意味着什么?

表示在调用的时候可以接收任意多的参数

 

void f ()     //很多工作多年的工程师,认为这就是不接受参数的函数
{


}

void f()  这样写并不是意味着不接受任何参数,反而是接受任意多的参数

demo 执行完 return 后,后面的那条printf 不再被执行

void 没有返回类型 意味着是一个 process 类型的函数

func返回值为 int 意味着这是一个function 类型的函数

 错误在 func 并不是每个执行分支都有retuen 语句

我们得保证return 的值的类型和返回类型是一致的


 demo 是一个process 类型的函数,它不返回任何值,并且这个函数不接受任何的参数

验证 process 类型的函数即便不写 return ,也会自动的return

打印 End 意味着什么? 

意味着调用了 Demo 并且执行了Demo的函数体之后返回了,

在这条语句的后面,即使我们没有写 return,其实也会隐含的有一个return,写不写return 都一样,写不写return 都会返回

第7 行的return 写不写都一样 

 

 这里执行 return 语句意味着什么,意味着从demo函数返回主调函数main,返回主调函数就向下执行,所以打印的结果就只有这3个了

return a + b; 这条分支就是将参数 1和2 相加 作为函数调用的值返回,因此 c 的值为3,正确

 结果为1,为什么为1,不知道,理解为错误的没有意义的结果

因为这个时候函数体没法执行,不得不返回,因为所有的函数体语句都执行完了,这个时候并没有指定返回值,真正返回值是什么呐,就是随机值,这个随机值不是我们期望的结果,所有这是一个错误的结果

改掉

保证所有的执行分支都有显示的return语句

 

 字符串和整型不兼容,所以报错

字符的本质是什么,就是最小的整型,因此返回值和返回类型兼容

这个函数是完全正确的,为什么,因为具体的返回的值的数据类型和函数返回类型是兼容的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长生君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值