C语言函数的出口:return语句(高质量c/c++编程指南)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

今天看到了一篇关于c/c++语言中,对于函数出口处:return语句的正确性和效率性的检查问题。平时我们都不太看重return语句的,认为它简单,不是很重要,其实不然,return语句要是写的不好,很容易导致效率低下,甚至会出错!特别是在处理指针时。
下面看看要注意的一些细节:

1.return语句不可返回指向“栈内存”的“指针”或“引用”,因为“栈内存”的空间在函数体结束时,自动被销毁,指向这里的指针就会出错!

例如:
char * Function(void)
{

      char str[]="Hello,world!";    //str的内存是在Function这个函数的栈上的

     return str;    //这里就会出错,返回时,str已经不知道指向哪里了

}

2.要搞清楚返回的究竟是“值”、“指针”、还是“引用”。

   因为返回值的不同,处理的方法也不同,否则会出错的

3.如果函数返回的值是一个对象,那么就要考虑return语句的效率了!
例如:代码1

return String(str1+str2);

这是临时对象的语法,表示“创建一个临时对象,并返回它”。但是它并不 与 “先创建一个
局部对象temp,然后返回它的结果”等价!!
如:代码2

String temp(str1+str2);
return temp;

实际上它们差了很多了!
上面的 代码2 执行时,将发生三件事:
1:temp对象被创建,同时完成初始化;
2:拷贝构造函数把temp拷贝到保存返回值的外部存储单元中;
3:temp在函数结束时被销毁。

但是代码1执行时跟代码2不同:编译器直接把临时变量创建并初始化在外部存储单元里,省去了拷贝和
析构的过程,也就少了这部分的时间开销,提高了效率。所以,返回任何结构或类的对象时,一定要这
样做!

另外,return int(x+y);这样的语句不要写成:temp=int(x+y);return temp;
虽然象int,float,double 等数据类型不存在拷贝析构的问题,不会提高多少效率,但写出来的语句更简洁,
看来也清楚的多!

林锐:《高质量的C/C++编程 知错就改;经常温故而知新;坚持学习,天天向上。 阅读详情

相关推荐

高质量的C/C++编程规范》学习

本篇文章是我在学习林锐博士的《高质量的C/C++编程》及一些其他网络资料之后进行的一篇自我学习总结。由于对C++还不是很熟悉,所以本篇文章主要总结了C语言部分,在日后深入学习C++时,在进行详细补充。

m0_65292176的博客 4495

java多表return语句吗_java - 编程首选项 - 使用具有多个return语句的else ifs? - 堆栈内存溢出...

就个人而言,我认为else是不必要的。 由于这个问题被标记为[language-agnostic] ,我将提供一些如何编写它的例子:def temperature_message(temp)return 'Freezing' if temp < 32return 'Brr' if temp < 60return 'Comfortable' if temp &lt...

weixin_30068877的博客 109

林锐-高质量c/c++编程指南

返回主页高质量C++/C编程指南文件状态[ ] 草稿文件[√] 正式文件[ ] 更改正式文件 文件标识: 当前版本: 1.0作 者: 林锐 博士完成日期: 2001年7月24日版 本 历 史版本/状态 作者 参与者 起止日期 备注V 0.9草稿文件 林锐 2001-7-1至2001-7-18 林锐起草V 1.0正式文件 林锐 2001-7-18至2001-7-24 朱洪海审查V 0.9,林锐修正草

autoair的专栏 6697

c语言程序的出口,C语言函数出口——return 语句

如果函数返回的值是一个对象,那么就要考虑return语句的效率了!例如:代码1return String(str1+str2);这是临时对象的语法,表示“创建一个临时对象,并返回它”。但是它并不 与 “先创建一个局部对象temp,然后返回它的结果”等价!!如:代码2String temp(str1+str2);return temp;实际上它们差了很多了!上面的 代码2 执行时,将发生三件事:1:...

weixin_33985453的博客 1215

C语言函数出口——return 语句

C语言函数出口——return 语句

韦编二绝 2359

函数设计的两个原则(单一出口、一专多能)和实例

函数设计应该像模块设计一样,讲究接口和封装。函数的命名应该让使用函数的程序员见名知意,函数应该封装成简单易用的形式,而且当函数内部实现算法变化时,函数还能够保持接口的稳定性。 下面的例子来源于浙江大学翁恺老师的《C语言程序设计进阶》中的线性搜索算法。 首先看这样一个搜索算法,实现的功能是在一个数组中找出需要的数字,并且返回该数字在数组中的位置;找不到,则返回-1。 int search(i...

吉大秦少游 8240

高质量C/C++编程指南

本文档参考《高质量C++ C编程指南》及自己的心得编写,如有侵权,立刻删除!定义文件有三部分内容:(1)定义文件开头处的版权和版本声明;(2)对一些头文件的使用;(3)程序的实现体(包括数据和代码)假设定义文件的名称为header.cpp,定义文件的结构参见如下://版权和版本说明见2.1.1,此处省略#include "header.h" //引用头文件...//全局函数的实现体...//类成员函数的实现体...

weixin_72852519的博客 3509

高质量C/C++编程指南(PDF)下载介绍

高质量C/C++编程指南(PDF)下载介绍 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了一本关于C/C++编程指南,旨在帮助开发者提高编程质量和效率。本书详细介绍了文件结构、程序版式、命名规则、表达式与基本语句、常量、函数设计、内存管理、C++函数的高级特性、类的构造函数与析构函数、类的继承与组合以及其他编程经验等内容。 目录 以下是本书的详细目录: 前...

gitblog_06700的博客 834

写好C/C++代码,大学生必读:林锐博士的《高质量 C++/C 编程指南

作为一名大学生,我深知在学习编程的过程中,写出高质量的代码是多么重要。最近,我读了林锐博士的《高质量 C++/C 编程指南》,这本书让我受益匪浅,今天想和大家分享一下我的学习心得。

晚风的博客 1339

林锐C语言--高质量C/C++编程(第三四章)

【规则 3-2-7】为了防止某一软件库中的一些标识符和其它软件库中的冲突,可以为各种标识符加上能反映软件性质的前缀。【规则 3-2-6】类的数据成员加前缀 m_(表示 member),这样可以避免数据成员与_成员函数参数同名。【规则 3-1-7】全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。【规则 3-1-8】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。提高循环体效率的基本办法是降低循环体的复杂性。【规则 3-1-6】变量的名字应当使用“名词”或者“形容词+名词”。

千月星跡 1245

高质量C/C++编程指南》阅读总结

C/C++程序编写规范原著链接:https://download.csdn.net/download/zhangyuanxuevaq/10354477头文件的结构:【建议】 头文件中只存放“声明”而不存放“定义”在 C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小...

yuanxue_vaq的博客 2817

林锐C语言--高质量C/C++编程(第五六章)

【规则 5-3-1】需要对外公开的常量放在头文件中,不需要对外公开的常量在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。【规则 5-3-2】如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。例如。

千月星跡 925

高质量程序设计指南C/C++语言》笔记总结

在对林锐,韩永泉编著的《高质量程序设计指南C/C++语言》的学习中,我从中了解到了很多编程的小细节和重要的概念,特总结规整如下: 1.标准C语言允许任何非void类型的指针和void类型的指针之间进行直接的相互转换。但在C++中,可以把任何类型的指针直接指派给void类型指针,因为void*是一种通用指针;但是不能反过来将void类型指针直接指派给任何非void类型的指针,除非进行强制转换。因此

罗小黑の窝 1225

高质量C/C++编程指南》第1期

高质量C/C++编程指南、代码风格

超烦豆先森 2021

高质量的C/C++编程(2)----程序员必看系列

前言 首先声明,文章内容并非原创,而是从林锐博士所著的《高质量的C/C++编程》书籍摘要总结并加上了一部分我自己的理解而来,从中截取了一些我们在C语言中常用到的一些规则,一些内容我们在初始阶段用不到,所以对其进行了删减,主要是为了减轻大家的阅读负担,这个系列就是为了帮助大家写出规范、美观的代码,下面正文内容即将开始! 第二章 2.1 空行 空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加 清晰。空行不会浪费内存,反而会使代码具有更好的可读性,层次更加分明,程序更加美观。

m0_57304511的博客 7614

高质量C/C++编程指南》学习笔记

这本书只有短短100页,可是却可以称得上是脍炙人口。一年前初读此书时就感觉受益良多,而今再次重读,仍然不肯停顿一口气读完。针对书中指出的一些编程规则和建议,摘录下个人认为比较好的部分。 第1章 文件结构 为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。 用 #include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。 用 #incl

Hao_09的专栏 2292

高质量 C++/C 编程指南笔记——C语言部分【附带电子书】

对林锐博士的高质量 C++/C 编程指南的C语言部分做的笔记和提炼。

The_bad的博客 2368
上一篇: 好久没来写东西了!
下一篇: C++中的多继承、虚继承和模板的来由
kuaidc
博客等级 码龄22年 9粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值