《C Elements of Style》 书摘
《C Elements of Style》 书摘
学完C语言和数据结构后,虽然能解决一些问题,但总觉得自己写的程序丑陋,不专业。这时候看到了Steve Oualline写的《C Elements of Style》才知道怎么写看起来专业的代码。
花一天时间把这本书重读一遍,发现这本书对我的影响真是太大了,我上课,写代码都会不知不觉引用上面的内容,我还以为这些知识点来自《代码大全(Code Complete)》。
《C Elements of Style》是本开放图书,供大家学习参考,下面内容取自第九章,是规则汇总。
Chapter 1:Style and Program Organization
- Rule 1-1: Organize programs for readability, just as you would expect an author to organize a book.
- Rule 1-2: Divide each module up into a public part (what's needed to use the module) and a private part (what's needed to get the job done). The public part goes into a .h file, while the private part goes into a .c file.
- Rule 1-3: Use white space to break a function into paragraphs.
- Rule 1-4: Put each statement on a line by itself
- Rule 1-5: Avoid very long statements. Use multiple shorter statements instead.
Chapter 2:File Basics, Comments, and Program Headings
- Rule 2-1: Keep programs files to no longer than about 2,000 to 3,000 lines.
- Rule 2-2: Keep all lines in your program files down to 72 characters or fewer.
- Rule 2-3: Use 8-character tab stops.
- Rule 2-4: Use only the 95 standard ASCII characters in your programs. Avoid exotic characters. (Foreign characters may be used if you are writing comments in a foreign language.)
- Rule 2-5: Include a heading comment at the beginning of each file that explains the file.
- Rule 2-6: Leave out unnecessary comments if they require maintenance and if you are unlikely to maintain them.
- Rule 2-7: Comment your code as you write it.
Chapter 3:Variable Names
- Rule 3-1: Use simple, descriptive variable names.
- Rule 3-2: Good variable names are created by using one word or by putting two or three
words together, separated by “_”. For example: - Rule 3-3: Never use I (lowercase L) or O (uppercase O) as variable or constant names.
- Rule 3-4: Don't use the names of existing C library functions or constants.
- Rule 3-5: Don't use variable names that differ by only one or two characters. Make every name obviously different from every other name.
- Rule 3-6: Use similar names for variables that perform similar functions.
- Rule 3-7: When creating a two word variable name where the words can be put in any order, always put the more important word first.
- Rule 3-8: Standard prefixes and suffixes are _ptr, _p, _file, fd, and n.
- Rule 3-9: Short names such as x, y, and i are acceptable when their meaning is clear and when a longer name would not add information or clarity.
- Rule 3-10: Use argc for the number of command line arguments and argv for the argument list. Do not use these names for anything else.
- Rule 3-11: Follow every variable declaration with a comment that defines it.
- Rule 3-12: Whenever possible, include the units of measure in the description of a variable.
- Rule 3-13: Name and comment each field in a structure or union like a variable.
- Rule 3-14: Begin each structure or union definition with a multi-line comment describing it.
- Rule 3-15: Put at least one blank line before and after a structure or union definition.
- Rule 3-16: When you can't put a descriptive comment at the end of a variable declaration, put it on a separate line above. Use blank lines to separate the declaration/comment
pair from the rest of the code. - Rule 3-17: Group similar variables together. When possible, use the same structure for each group.
- Rule 3-18: Don't use hidden variables.
- Rule 3-19: Use the names INT16, INT32, UINT16, and UINT32 for portable application
- Rule 3-20: Floating-point numbers must have at least one digit on either side f the decimal point.
- Rule 3-21: The exponent in a floating-point number must be a lowercase e. This is always followed by a sign.
- Rule 3-22: Start hexadecimal numbers with Ox. (Lowercase x only.)
- Rule 3-23: Use uppercase A through F when constructing hexadecimal constants.
- Rule 3-24: Long constants should end with an uppercase L.
Chapter 4:Statement Formatting
- Rule 4-1: Write one statement per line.
- Rule 4-2: Put spaces before and after each arithmetic operator, just like you put spaces between words when you write.
- Rule 4-3: Change a long, complex statement into several smaller, simpler statements.
- Rule 4-4: In a statement that consists of two or more lines, every line except the first must be indented an extra level to indicate that it is a continuation of the first line.
- Rule 4-5: When writing multi-line statements, put the arithmetic and logical operators at the end of each line.
- Rule 4-6: When breaking up a line, the preferred split point is where the parenthetic nesting is lowest.
- Rule 4-7: Align like level parentheses vertically.
- Rule 4-8: Split long for statements along statement boundaries.
- Rule 4-9: Always split a for statement into three lines.
- Rule 4-10: Write switch statements on a single line.
- Rule 4-11: Keep conditionals on a single line if possible.
- Rule 4-12: When splitting a conditional clause (? :), write it on three lines: the condition line, the true-value line, and the false-value line. Indent the second and third line an extra level.
- Rule 4-13: Avoid side effects.
- Rule 4-14: Put the operator ++ and -- on lines by themselves. Do not use ++ and -- inside other statements.
- Rule 4-15: Never put an assignment statement inside any other statement.
- Rule 4-16: If putting two or more statements on a single line improves program clarity, then do so.
- Rule 4-17: When using more than one statement per line, organize the statement into columns.
- Rule 4-18: Indent one level for each new level of logic.
- Rule 4-19: The best indentation size is four spaces.
Chapter 5:Statement Details
- Rule 5-1: Always put a comment in the null statement, even if it is only
- Rule 5-2: In C expressions, you can assume that *, /, and % come before + and -. Put parentheses around everything else.
- Rule 5-3: Use ANSI style function declarations whenever possible.
- Rule 5-4: When using K&R parameters, declare a type for every parameter.
- Rule 5-5: When using K&R parameters, put the type declarations for the parameters in the same order as the occur in the function header.
- Rule 5-6: Always declare a function type
- Rule 5-7: Always declare functions that do not return a value as void.
- Rule 5-8: Allow no more that five parameters to a function.
- Rule 5-9: Avoid using global variables where function parameters will do.
- Rule 5-10: Avoid variable length parameter lists. They are difficult to program and can easily cause trouble.
- Rule 5-11: When an if affects more than one line, enclose the target in braces.
- Rule 5-12: In an if chain, treat the words else if as one keyword.
- Rule 5-13: Never use the comma operator when you can use braces instead.
- Rule 5-14: When looping forever, use while (1) instead of for(;;).
- Rule 5-15: Avoid using do/while. Use while and break instead.
- Rule 5-16: Use the comma operator inside a for statement only to put together two statements. Never use it to combine three statements.
- Rule 5-17: Use one printf per line of output.
- Rule 5-18: Unless extreme efficiency is warranted, use printf instead of puts and putc.
- Rule 5-19: Start goto labels in the first column.
- Rule 5-20: End every case in a switch with a break or the comment /* Fall Through */
- Rule 5-21: Always put a break at the end of the last case in a switch statement.
- Rule 5-22: Always include a default case in every switch, even if it consists of nothing but a null statement.
Chapter 6:Preprocessor
- Rule 6-1: #define constants are declared like variables. Always put a comment describes the constant after each declaration.
- Rule 6-2: Constant names are all upper-case.
- Rule 6-3: If the value of a constant is anything other than a single number, enclose it in parentheses.
- Rule 6-4: The use of const is preferred over #define for specifying constants.
- Rule 6-5: When possible, use typedef instead of #define.
- Rule 6-6: Don't use #define to define new language elements.
- Rule 6-7: Never use #define to redefine C keywords or standard functions.
- Rule 6-8: Enclose parameterized macros in parentheses.
- Rule 6-9: Enclose each argument to a parameterized macro in parenthesis.
- Rule 6-10: Always enclose macros that define multiple C statements in braces.
- Rule 6-11: If a macro contains more than one statement, use a do/while structure to enclose the macro. (Don't forget to leave out the semicolon of the statement).
- Rule 6-12: When creating multi-line macros, align the backslash continuation characters () in a column.
- Rule 6-13: Always comment any parameterized macros that look like functions.
- Rule 6-14: #include directives come just after the heading comments. Put system includes first, followed by local includes.
- Rule 6-15: Do not use absolute paths in #include directives. Let the -I compile opt
- Rule 6-16: Comment #else and #endif directives with the symbol used in the initial #ifdef or #endif directive.
- Rule 6-17: Use conditional compilation sparingly. Don't let the conditionals obscure the code.
- Rule 6-18: Define (or undefine) conditional compilation control symbols in the code rather than using the -D option to the compiler.
- Rule 6-19: Put #define and #undef statements for compilation control symbols at the beginning of the program.
- Rule 6-20: Do not comment out code. Use conditional compilation (#ifdef UNDEF) to get rid of unwanted code.
- Rule 6-21: Use #ifdef QQQ to temporarily eliminate code during debugging.
Chapter 7:Directory Organization and Makefile Style
- Rule 7-1: Whenever possible, put all the files for one program or library in one directory.
Chapter 8:User-Friendly Programming
- Rule 8-1: Law of Least Astonishment: The program should act in a way that least astonishes the user.
- Rule 8-2: Begin each error message with Error:. Begin each warning message with Warning:.
- Rule 8-3: Don't let users do something stupid without warning them.
欢迎关注“rocedu”微信公众号(手机上长按二维码)
做中教,做中学,实践中共同进步!

版权声明:自由转载-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
如果你觉得本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文”
《C Elements of Style》 书摘的更多相关文章
- Code Simplicity–The Science of Software Development 书摘
Chapter1 Introduction That is the art and talent involved in programming—reducing complexity to simp ...
- 《CODE》书摘
2016-11-08 14:59:16 可以说英语词汇就是一种编码. 2016-11-08 15:19:04 实际上任何两种不同的东西经过一定的组合都可以代表任何种类的信息. 2016-11-08 1 ...
- Visual Studio Code 代理设置
Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器,在十多年的编程经历中,我使用过非常多的的代码编辑器(包括 IDE),例如 Fron ...
- 我们是怎么做Code Review的
前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨.我们为什么要推行Code ...
- Code Review 程序员的寄望与哀伤
一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...
- 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM
刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...
- 在Visual Studio Code中配置GO开发环境
一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github ...
- 代码的坏味道(14)——重复代码(Duplicate Code)
坏味道--重复代码(Duplicate Code) 重复代码堪称为代码坏味道之首.消除重复代码总是有利无害的. 特征 两个代码片段看上去几乎一样. 问题原因 重复代码通常发生在多个程序员同时在同一程序 ...
- http status code
属于转载 http status code:200:成功,服务器已成功处理了请求,通常这表示服务器提供了请求的网页 404:未找到,服务器未找到 201-206都表示服务器成功处理了请求的状态代码,说 ...
随机推荐
- 从零开始一起学习SLAM | 学习SLAM到底需要学什么?
SLAM涉及的知识面很广,我简单总结了 “SLAM知识树” 如下所示: (公众号菜单栏回复 “树” 可获得清晰版) 可以看到涉及的知识面还是比较广的.这里放出一张SLAM圈子里喜闻乐见的表达悲喜交加心 ...
- Ubuntu下orbbec mini 无法正常显示图像问题
最近用orbbec的深度摄像头采集RGBD图像,Windows下一切OK.但是Ubuntu下出现了不少问题.总结一下 1.将设备插到USB,先确定电脑能否正常识别设备 Ubuntu下是不需要安装驱动的 ...
- Selenium基本使用(十三)测试中常见问题
我们在使用selenium测试过程中,经常会遇到这样的问题: 1.frame或iframe <iframe id='frame1' name='frame1'> <input typ ...
- 如何解决“504 Gateway Time-out”错误
做网站的同学经常会发现一些nginx服务器访问时候提示504 Gateway Time-out错误,一般情况下是由nginx默认的fastcgi进程响应慢引起的,但也有其他情况,这里我总结了一些解决办 ...
- Python全栈-异常处理
一.异常 1.异常的定义 异常是错误发生的信号,程序一旦出错就会抛出错误信息,如果不及时处理就会程序就会随之停止运行 异常有三部分组成: 1)异常类型 2)异常追踪 3)异常的值 2.异常的分类 1) ...
- 键值对Dictionary、KeyValuePair、Hashtable 简单使用。
KeyValuePair是单个的键值对对象.KeyValuePair可用于接收combox选定的值. 例如:KeyValuePair<string, object> par = (KeyV ...
- EasyUI表格DataGrid获取数据的方式
第一种方式:直接返回JSON数据 package com.easyuijson.util; import java.text.SimpleDateFormat; import net.sf.js ...
- url组成
- 【Hbase学习之三】Hbase Java API
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-2.6.5 hbase-0.98.12.1-h ...
- FileChannel
1, FileChannel 虚拟类,不可以直接实例化,可以通过FileInputStream FileOutputStream 获取 例:文件的复制 public class ChannelDem ...