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

news/2024/11/26 6:06:23/


因为编译器是自上而下执行代码的,当编译到 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语句

 

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

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

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


http://www.ppmy.cn/news/43053.html

相关文章

【hello Linux】环境变量

目录 1. 环境变量的概念 2. 常见的环境变量 3. 查看环境变量 4. 和环境变量相关的命令 5. 环境变量的组织方式 6. 通过代码获取环境变量 7. 通过系统调用获取环境变量 Linux🌷 在开始今天的内容之前,先来看一幅图片吧! 不知道你们是否和我一…

Stable Diffusion成为生产力工具(五):放大并修复老照片、马赛克照片、身份证件照

S:你安装stable diffusion就是为了看小姐姐么? I :当然不是,当然是为了公司的发展谋出路~~ 预先学习: 安装webui《Windows安装Stable Diffusion WebUI及问题解决记录》。运行使用时问题《Windows使用Stable Diffusion时…

计算机发展史-计算机基础知识总结(上)

随着计算机技术的不断发展,计算机已经成为人们日常生活中必不可少的一部分,而且它也对人类社会产生了巨大的影响。本文将从计算机的发展历史、计算机硬件和软件、操作系统、计算机网络、数据库等方面进行系统的介绍,为读者提供计算机基础知识…

springboot+thymeleaf实现发Html邮件自由

2019年,我刚接触测试架构和测试开发类的工作时,经常会有自动化发邮件的功能,大都是从各个平台自动化统计一些数据出来,每周定时发一封邮件给领导交差,回过头来再看看我发的邮件,不美观,不专业。…

LeetCode-152. 乘积最大子数组

目录思路动态规划题目来源 152. 乘积最大子数组 思路 这题跟LeetCode-53. 最大子数组和很像 最后把整个 dp 数组看一遍求最大值即可。因此状态转移方程可能是: dp[i] Math.max(dp[i-1]nums[i],nums[i]);说明:牢记状态的定义,一定以下标 i…

NDK RTMP直播客户端二

在之前完成的实战项目【FFmpeg音视频播放器】属于拉流范畴,接下来将完成推流工作,通过RTMP实现推流,即直播客户端。简单的说,就是将手机采集的音频数据和视频数据,推到服务器端。 接下来的RTMP直播客户端系列&#xff…

在 Flutter 多人视频通话中实现虚拟背景、美颜与空间音效

前言 在之前的「基于声网 Flutter SDK 实现多人视频通话」里,我们通过 Flutter 声网 SDK 完美实现了跨平台和多人视频通话的效果,那么本篇我们将在之前例子的基础上进阶介绍一些常用的特效功能,包括虚拟背景、色彩增强、空间音频、基础变声…

机器学习-作业2-贝叶斯网络

作业2 实现能处理连续属性的贝叶斯网络。 思路 怎么自动判断该属性是离散还是连续:计算该属性的不同值有多少个,超过10个就认为是连续,否则是离散的。离散的:统计该类、该属性、该值的各个数量,计算概率&#xff0c…