《C语言深度解剖》学习笔记之函数
第6章 函数
1.编码风格
【规则6-1】每一个函数都必须有注释
【规则6-2】每个函数定义之后以及每个文件结束之后都要加若干个空行
【规则6-3】在一个函数体内,变量定义与函数语句之间要加空行
【规则6-4】逻辑上密切相关的语句之间不加空行
【规则6-5】复杂的函数中,在分支语句,循环语句结束之后需要适当的注释
【规则6-6】不要随意删除别人的代码
【规则6-7】用缩行显示程序结构,缩进量同意使用4个字符
【规则6-8】同层次的代码在同层次的缩进层
【规则6-9】代码行最大长度控制在80个字符以内
【规则6-10】长表达式要在低优先级操作符处划分新行,操作符放在新行之首(以便突出操作符)
if((very_longer_variable1 >= very_longer_variable2)
&&(very_longer_variable3 <= very_longer_variable4)
&&(very_longer_variable5 <= very_longer_variable6))
{
//code
}
【规则6-11】用正确的反义词组命名具有互斥意义的变量或相反动作的函数
【规则6-12】用括号表达操作顺序
【规则6-13】不要编写太复杂的表达式
【规则6-14】不要编写多用途的表达式
【规则6-15】原则上尽量少使用全局变量,因为它的生命周期太长
【规则6-16】参数命名恰当,顺序合理
【规则6-17】如果参数是指针,且仅作输入参数作用,则应在类型前加const,防止指针在函数体内被修改
【规则6-18】不要省略函数的返回类型,如果函数没有返回值,则应声明为 void。如果缺省返回值类型,编译器默认为int
【规则6-19】函数入口处,对函数参数的有效性进行检查
【规则6-20】return语句不可返回指向“栈内存”的“指针
【规则6-21】相同的输入产生相同的输出。尽量避免函数带有记忆功能,少用static局部变量
【规则6-22】数组的大小应该显式声明
2.函数递归
void fun(int i)
{
if (i>)
{
fun(i/);
}
printf("%d\n",i);
}
int main()
{
fun();
return ;
}
上面的递归应该展开为如下的形式:
void fun(int i)
{
if (i>)
{
fun(i/);
if (i/>)
{
fun(i/);
{
}
printf("%d\n",i/);
}
printf("%d\n",i/); }
printf("%d\n",i);
}
《C语言深度解剖》学习笔记之函数的更多相关文章
- C语言深度解剖读书笔记(6.函数的核心)
对于本节的函数内容其实就没什么难点了,但是对于函数这节又涉及到了顺序点的问题,我觉得可以还是忽略吧. 本节知识点: 1.函数中的顺序点:f(k,k++); 这样的问题大多跟编译器有关,不要去刻意追求 ...
- C语言深度解剖读书笔记
开始本节学习笔记之前,先说几句题外话.其实对于C语言深度解剖这本书来说,看完了有一段时间了,一直没有时间来写这篇博客.正巧还刚刚看完了国嵌唐老师的C语言视频,觉得两者是异曲同工,所以就把两者一起记录下 ...
- 【转】 C语言深度解剖读书笔记(1.关键字的秘密)
本文出处:http://blog.csdn.net/mbh_1991/article/details/10149805 开始本节学习笔记之前,先说几句题外话.其实对于C语言深度解剖这本书来说,看完了有 ...
- c语言深度解剖(笔记)
1.1最宽恒大量的关键字----auto 函数内部变量,限制作用域为这个 1.2.1最快的关键字---- register函数. 关键字请求编译器尽可能的将变量存在 CPU 内部寄存器中 1.2.2使 ...
- haskell学习笔记_函数
一开始学习函数式编程语言就被告知函数式编程语言是一种“定义式”的语言,而不是一种命令式的语言,在学习haskell的函数语法时,此感觉更加强烈,haskell的函数定义倾向于一种类似C++里面的swi ...
- R语言与机器学习学习笔记
人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...
- R语言与显著性检验学习笔记
R语言与显著性检验学习笔记 一.何为显著性检验 显著性检验的思想十分的简单,就是认为小概率事件不可能发生.虽然概率论中我们一直强调小概率事件必然发生,但显著性检验还是相信了小概率事件在我做的这一次检验 ...
- Matlab学习笔记 figure函数
Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...
- matlab学习笔记 bsxfun函数
matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下. ...
- go语言,golang学习笔记4 用beego跑一个web应用
go语言,golang学习笔记4 用beego跑一个web应用 首页 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/ 更新的命令是加个 -u 参数,g ...
随机推荐
- H5C3--transform实现任何元素居中对齐
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在网站制作过程中发现的block和inline-block不同。
inline-block,简单来说就是在CSS中通过display:inline-block对一个对象指定inline-block属性,可以将对象呈递为内联对象,但是对象的内容作为块对象呈递.有时既希 ...
- redis 原生操作 & python操作redis
一.基本介绍 1.简介 Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remote Dictionary Ser ...
- 关于python的元组操作
关于元组: 元组和列表是类似的,但是元组中的数据是不可以修改的. 元组是一对 () 元组操作: 元组是不可以修改的所以对元组的操作极少 定义空元组(因为元组一旦创建,数据不可被修改,所以极少创建空元组 ...
- java-File类-字节流
一 File 1.1 递归子目录 获取所有子目录中的内容 import java.io.File; public class GetAllFiles { /** * @param args */ pu ...
- centos下彻底删除mysql
打算重新试试安装两个mysql,就把老的删除了. yum remove mysql mysql-server mysql-libs compat-mysql51 rm -rf /var/lib/mys ...
- R语言可视化--qplot函数
ggplot绘图系统 使用动词名词形容词构造句子的过程,将数据映射到美学属性上的过程,由层组成 绘图函数 qplot() :参数包括美学属性.几何体.面.统计.坐标系.主题这些层次. ggplot() ...
- Django与HTML业务基本结合--基本的用户名密码提交方法1
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- .NET EasyUI datebox添加清空功能
前言,前段时间的项目使用EasyUI框架搭建,使用了其自带的一系列组件.但对于datebox,其功能别的不多说,令人蛋疼的是它居然没有清空功能,这让在搜索区域中摆了日期条件的咋整啊,没办法,既然用了这 ...
- Spring使用JDBC配置具名参数
好处:若有多个参数,则不用再去对应位置?,直接对应参数名,便于维护 缺点:较为麻烦 使用具名参数时可以使用以下的方法 好处,通过实现类BeanPropertySqlParameterSource之间传 ...