《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”微信公众号(手机上长按二维码)

做中教,做中学,实践中共同进步!



如果你觉得本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文


《C Elements of Style》 书摘的更多相关文章

  1. Code Simplicity–The Science of Software Development 书摘

    Chapter1 Introduction That is the art and talent involved in programming—reducing complexity to simp ...

  2. 《CODE》书摘

    2016-11-08 14:59:16 可以说英语词汇就是一种编码. 2016-11-08 15:19:04 实际上任何两种不同的东西经过一定的组合都可以代表任何种类的信息. 2016-11-08 1 ...

  3. Visual Studio Code 代理设置

    Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器,在十多年的编程经历中,我使用过非常多的的代码编辑器(包括 IDE),例如 Fron ...

  4. 我们是怎么做Code Review的

    前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨.我们为什么要推行Code ...

  5. Code Review 程序员的寄望与哀伤

    一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...

  6. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  7. 在Visual Studio Code中配置GO开发环境

    一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github ...

  8. 代码的坏味道(14)——重复代码(Duplicate Code)

    坏味道--重复代码(Duplicate Code) 重复代码堪称为代码坏味道之首.消除重复代码总是有利无害的. 特征 两个代码片段看上去几乎一样. 问题原因 重复代码通常发生在多个程序员同时在同一程序 ...

  9. http status code

    属于转载 http status code:200:成功,服务器已成功处理了请求,通常这表示服务器提供了请求的网页 404:未找到,服务器未找到 201-206都表示服务器成功处理了请求的状态代码,说 ...

随机推荐

  1. PHP 函数 ignore_user_abort()详解笔记

     定义和用法 ignore_user_abort()函数设置与客户机断开是否会终止脚本的执行  语法 ignore_user_abort(setting) 参数 描述 setting 可选.如果设置为 ...

  2. JAVA8流操作

    * Stream 的三个操作步骤: * 1创建Stream * 2中间操作 * 3终止操作 package airycode_java8.nice6; import airycode_java8.ni ...

  3. 关于hibernate总是报错 配置factory的id找不到,mapping配置文件Could not parse mapping document from input stream

    Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from input stream ...

  4. Yii2缓存依赖

  5. hdu2295DLX重复覆盖+二分

    题目是说 给了n个城市 m个雷达 你只能选择其中的k个雷达进行使用 你可以设置每个雷达的半径,最后使得所有城市都被覆盖,要求雷达的半径尽可能的小(所有雷达的半径是一样的) 二分最小半径,然后每次重新建 ...

  6. Python - 3. Input and Output

    from:http://interactivepython.org/courselib/static/pythonds/Introduction/InputandOutput.html Input a ...

  7. java运行cmd命令

    java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. cmd /k dir 是执行完d ...

  8. flask 重定向到上一个页面,referrer、next参数

    重定向会上一个页面 在某些场景下,我们需要在用户访问某个url后重定向会上一个页面,比如用户点击某个需要登录才能访问的连接,这时程序会重定向到登录页面,当用户登录后比较合理的行为是重定向到用户登录前浏 ...

  9. Maven依赖中的scope详解,在eclipse里面用maven install可以编程成功,到服务器上用命令执行报VM crash错误

    Maven依赖中的scope详解 项目中用了<scope>test</scope>在eclipse里面用maven install可以编译成功,到服务器上用命令执行报VM cr ...

  10. python 关键字yield解析

    python 关键字yield解析 yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.y ...