《C语言程序设计进阶教程》一3.1.2 编程中

简介: 本文讲的是C语言程序设计进阶教程一3.1.2 编程中,本节书摘来华章计算机《C语言程序设计进阶教程》一书中的第3章,第3.1.2节, Intermediate C Programming[美] 陆永祥(Yung-Hsiang Lu) 著 徐东 译 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.1.2 编程中

本文讲的是C语言程序设计进阶教程一3.1.2 编程中,这可能会让你感到吃惊:如果你想要正确且更快地完成程序,那就写更多的代码。写一些并不需要的代码。在你为了满足一个要求而把代码放到一个更大的程序之前,写一个小程序来测试你的解决方案。这叫作单元测试。如果你不能让一个函数正常工作,那你肯定不能在把很多函数放在一起之后让其正常工作。在你完成了程序的一些部分之后,要确保在继续下去之前这些部分可以正常工作。你需要去编写额外的代码来测试这些部分,因为其他部分还没有准备好。有一个经验法则:对于你需要写的每一行代码,你应该写三行额外的代码。这些额外的工作会帮助你理解你必须做什么,并且帮助你测试已经完成的工作。
总是使用一个自动缩进程序的文本编辑器。这样的编辑器可以帮助你在出错的地方检测大括号。为什么缩进很重要呢?因为更容易直观地检测未对齐的代码。使用正确的工具可以节省你宝贵的时间。
在运行任何测试用例之前一行一行地读你的代码。如果你之前没有试过这个方法,你会对这个方法的效果感到惊讶。读代码可以帮助你找到通过测试很难发现的问题。例如:
screenshot
分号“;”结束了if条件。结果就是在“{”和“}”之间的代码不受if条件控制并且一直运行。
在你脑中运行一些简单的测试例子。如果不理解你的程序是做什么的,计算机也不会去执行你想要的功能。
在进行之前,写一些代码去测试某些条件是否已经满足。假设排序是某程序的一部分:在程序去做其他事情之前,先检查一下数据是否已经被存储好了。
避免复制粘贴代码。相反,通过创建函数来重构代码,这样就可以避免复制代码了。如果你需要对复制过来的代码进行微小的改变,使用函数的实参就可以实现这样的变化。这是行之有效的原则:相似的代码会导致错误的发生。你会很快记不住复制的数量,搞不清相似的代码之间的不同。要在多个复制而来的代码间保持一致性是很困难的。你将会发现你的程序在一些情况下是正确的,但在其他情况下就是错误的。要发现并移除这个类型的bug将会是非常费时间的。最好的策略就是从一开始就去避免它。编写一个一直报错的程序会比一个时而正确时而错误的程序要好一些。如果它一直在报错,问题总是来自仅仅一个地方,你就可以集中精力在这一处。如果问题不是一直出现,且来自很多可能的地方,那么找到并移除这样的错误就会更加困难。
使用版本控制。您是否听过这样的经历:“程序的一些部分昨天还正常工作。我做了一些修改,现在就完全无法工作了。我改动了很多地方以至于我根本不知道到底改动了哪里。”版本控制会让你看到与之前版本相比的改动。
解决所有的编译警告。许多调查显示警告很可能会是严重的错误,虽然它们不是语法错误。一些人会忽略警告信息,认为他们可以在让程序运行起来之后再去解决这些警告。然而,警告信息经常预示着一些会导致程序难以运行的问题。

原文标题:C语言程序设计进阶教程一3.1.2 编程中

相关文章
|
23天前
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
41 8
|
26天前
|
C语言
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性。本文探讨了C语言中的错误类型(如语法错误、运行时错误)、基本处理方法(如返回值、全局变量、自定义异常处理)、常见策略(如检查返回值、设置标志位、记录错误信息)及错误处理函数(如perror、strerror)。强调了不忽略错误、保持处理一致性及避免过度处理的重要性,并通过文件操作和网络编程实例展示了错误处理的应用。
57 4
|
2月前
|
NoSQL C语言 索引
十二个C语言新手编程时常犯的错误及解决方式
C语言初学者常遇错误包括语法错误、未初始化变量、数组越界、指针错误、函数声明与定义不匹配、忘记包含头文件、格式化字符串错误、忘记返回值、内存泄漏、逻辑错误、字符串未正确终止及递归无退出条件。解决方法涉及仔细检查代码、初始化变量、确保索引有效、正确使用指针与格式化字符串、包含必要头文件、使用调试工具跟踪逻辑、避免内存泄漏及确保递归有基准情况。利用调试器、编写注释及查阅资料也有助于提高编程效率。避免这些错误可使代码更稳定、高效。
461 12
|
2月前
|
C语言 开发者
C语言实现猜数字小游戏(详细教程)
C语言实现猜数字小游戏(详细教程)
|
2月前
|
编译器 C语言 C++
VSCode安装配置C语言(保姆级教程)
VSCode安装配置C语言(保姆级教程)
|
3月前
|
C语言
C语言程序设计核心详解 第四章&&第五章 选择结构程序设计&&循环结构程序设计
本章节介绍了C语言中的选择结构,包括关系表达式、逻辑表达式及其运算符的优先级,并通过示例详细解释了 `if` 语句的不同形式和 `switch` 语句的使用方法。此外,还概述了循环结构,包括 `while`、`do-while` 和 `for` 循环,并解释了 `break` 和 `continue` 控制语句的功能。最后,提供了两道例题以加深理解。
106 7
|
3月前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
3月前
|
存储 C语言
C语言程序设计核心详解 第七章 函数和预编译命令
本章介绍C语言中的函数定义与使用,以及预编译命令。主要内容包括函数的定义格式、调用方式和示例分析。C程序结构分为`main()`单框架或多子函数框架。函数不能嵌套定义但可互相调用。变量具有类型、作用范围和存储类别三种属性,其中作用范围分为局部和全局。预编译命令包括文件包含和宏定义,宏定义分为无参和带参两种形式。此外,还介绍了变量的存储类别及其特点。通过实例详细解析了函数调用过程及宏定义的应用。
|
3月前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。
|
3月前
|
存储 算法 C语言
C语言程序设计核心详解 第一章:数制及转换与ASCII码
本专栏旨在夯实C语言基础,涵盖基础知识与进阶内容,助力解决自命题考试和考研问题,为数据结构与算法设计奠定坚实基础。内容包括数制及其转换、ASCII码、内存管理、机器码等,重点讲解二进制、八进制、十六进制的概念与转换方法,并介绍C语言的结构、数据类型和标识符规范。