对材料C Programming Style for Engineering Computation的总结。

原文如下:

 C Programming Style for Engineering Computation
Created by Aidan Nagorcka-Smith (aidann@student.unimelb.edu.au) //
Definitions and imports
Definitions are in UPPER_CASE
Imports go before definitions
Space between imports, definitions and the main function.
Use definitions for any constants in your program, do not just write them in
Good:
#import <stdio.h>
#import <stdlib.h>
#define MAX_STRING_SIZE 1000
#define DEBUG 0
int main(int argc, char **argv) {
...
Bad:
/* Definitons and imports are mixed up */
#import <stdlib.h>
#define MAX_STING_SIZE 1000
/* Definitions are given names like variables */
#define debug 0
#import <stdio.h>
/* No spacing between imports, definitions and main function*/
int main(int argc, char **argv) {
...
Variables
Give them useful lower_case names
Initialise them to something that makes sense whereever practical.
Good:
int main(int argc, char **argv) {
int i = ;
int num_fifties = ;
int num_twenties = ;
int num_tens = ;
...
Bad:
int main(int argc, char **argv) {
/* Variable not initialised - causes a bug becase we didn't remember to
* set it before the loop */
int i;
/* Variable in all caps - we'll get confused between this and constants */
int NUM_FIFTIES = ;
/* Overly abbreviated variable names make things hard. */
int nt =
while (i < ) {
...
i++;
}
...
Spacing:
Space intelligently, vertically to group blocks of code that are doing a
specific operation, or to separate variable declarations from other code.
One tab of indentation within either a function or a loop.
Spaces after commas.
Space between ) and {
No space between the ** and the argv in the definition of the main function.
Lines at most characters in width
Closing brace goes on its own line
Good:
int main(int argc, char **argv) {
int i = ;
for(i = ; i >= ; i--) {
if (i > ) {
printf("%d bottles of beer, take one down and pass it around,"
" %d bottles of beer.\n", i, i - );
} else {
printf("%d bottles of beer, take one down and pass it around."
" We're empty.\n", i);
}
}
return ;
}
Bad:
/* No space after commas
* Space between the ** and argv in the main function definition
* No space between the ) and { at the start of a function */
int main(int argc,char ** argv){
int i = ;
/* No space between variable declarations and the rest of the function.
* No spaces around the boolean operators */
for(i=;i>=;i--) {
/* No indentation */
if (i > ) {
/* Line too long */
printf("%d bottles of beer, take one down and pass it around, %d bottles of beer.\n", i, i - );
} else {
/* Spacing for no good reason. */
printf("%d bottles of beer, take one down and pass it around."
" We're empty.\n", i);
}
}
/* Closing brace not on its own line */
return ;}
Braces:
Opening braces go on the same line as the loop or function name
Closing braces go on their own line
Closing braces go at the same indentation level as the thing they are
closing
Good:
int main(int argc, char **argv) {
...
for(...) {
...
}
return ;
}
Bad:
int main(int argc, char **argv) {
...
/* Opening brace on a different line to the for loop open */
for(...)
{
...
/* Closing brace at a different indentation to the thing it's closing
*/
}
/* Closing brace not on its own line. */
return ;}
Commenting:
Each program should have a comment explaining what it does and who created it.
Any interesting code should have a comment to explain itself.
We should not comment obvious things - write code that documents itself
Good:
/* change.c
*
* Created by Aidan Nagorcka-Smith (aidann@student.unimelb.edu.au) 13/03/2011
*
* Print the number of each coin that would be needed to make up some change
* that is input by the user
*/
int main(int argc, char **argv) {
int input_change = ;
printf("Please input the value of the change (0-99 cents inclusive):\n");
scanf("%d", &input_change);
printf("\n");
// Valid change values are 0-99 inclusive.
if(input_change < || input_change > ) {
printf("Input not in the range 0-99.\n")
}
...
Bad:
/* No explanation of what the program is doing */
int main(int argc, char **argv) {
/* Commenting obvious things */
/* Create a int variable called input_change to store the input from the
* user. */
int input_change;
...
Code structure:
Fail fast - input checks should happen first, then do the computation.
Structure the code so that all error handling happens in an easy to read
location
Good:
if (input_is_bad) {
printf("Error: Input was not valid. Exiting.\n");
exit(EXIT_FAILURE);
}
/* Do computations here */
...
Bad:
if (input_is_good) {
/* lots of computation here, pushing the else part off the screen. */
...
} else {
fprintf(stderr, "Error: Input was not valid. Exiting.\n");
exit(EXIT_FAILURE);
}

总结:

  1. 在程序中避免出现Magic Number,使用宏定义(#define)代替,宏定义全部大写。
  2. 变量在定义时即赋予初值,使用驼峰式(numTens)或_(num_tens)都可以,保持同一种风格。
  3. 适当使用空格使程序清晰。
  4. 花空号{}的使用格式,{ 在同一行但有空格,} 单独一行。
  5. 像是if while for等与后面的 ( 有一个空格。
  6. 在程序开始前介绍信息(作用、作者等)
  7. 先检查可能失败项。

C Programming Style 总结的更多相关文章

  1. [转] 編程風格要素-The Elements of Programming Style 中文英文中英對照

    转自: http://www.loliman3000.com/tech/2fe33ce32906f0302412881.php 下面的程序風格規則提煉自Brian Kernighan和P. J. Pl ...

  2. 【转载】The Elements of Programming Style之代码风格金科玉律

    原始日期: 2017-02-06 16:20 <The Elements of Programming Style >是一本很古老的书.尽管 Fortran 我们不太使用,尽管新奇的语言层 ...

  3. [转] Matlab编程规范(MATLAB Programming Style Guidelines)

    转自: Jerry Zitao Liu的博客 主要是参考了下面这篇文章,简洁总结在这里. MATLAB Programming Style Guidelines 简洁总结如下: 表示object的数量 ...

  4. Java Programming Language Enhancements

    引用:Java Programming Language Enhancements Java Programming Language Enhancements Enhancements in Jav ...

  5. Google Java Style Guide

    https://google.github.io/styleguide/javaguide.html   Table of Contents 1 Introduction 1.1 Terminolog ...

  6. Julia is a high-level, high-performance dynamic programming language for technical computing, with syntax that is familiar to users of other technical

    http://julialang.org/ julia | source | downloads | docs | blog | community | teaching | publications ...

  7. The C++ Programming Language - Bjarne Stroustrup

    Preface Part 1: Introduction 1.1 The Structure of This Book 1.1.1 Introduction 1.1.2 Basic Facilitie ...

  8. 类型检查和鸭子类型 Duck typing in computer programming is an application of the duck test 鸭子测试 鸭子类型 指示编译器将类的类型检查安排在运行时而不是编译时 type checking can be specified to occur at run time rather than compile time.

    Go所提供的面向对象功能十分简洁,但却兼具了类型检查和鸭子类型两者的有点,这是何等优秀的设计啊! Duck typing in computer programming is an applicati ...

  9. Flux 普及读本

    话说当时做 APP 时,三月不知肉味,再次将眼光投放前端,有种天上一天,地下一年的感觉. Flux 是一种思想 了解的最好方式当然是看Flux官方文档了.React 中文站点也能找到对应的翻译版本,但 ...

随机推荐

  1. C#简单接口和继承示例详解——快速入门

    上一篇中我们说到继承,其实他们之间是差不多的. 接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口. C#中接口可以多继承,接口之间可以相互继承和多继承.一个类可以同时继承一个类和多个 ...

  2. Docker 安装rabbitMQ

    Docker 安装rabbitMQ docker pull rabbitmq:3.7.7-management 使用:docker images 查看所有镜像 4.根据下载的镜像创建和启动容器 doc ...

  3. 18、实现strStr()

    18.实现strStr() 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 ( ...

  4. TiDB

    由于目前的项目把mysql换成了TiDb,所以特意来了解下tidb.其实也不能说换,由于tidb和mysql几乎完全兼容,所以我们的程序没有任何改动就完成了数据库从mysql到TiDb的转换,TiDB ...

  5. Django学习之三:django-admin 和 项目manage.py程序

    目录 Django django-admin 和 项目manage.py程序 它俩是什么? 命令程序用法 常用命令 Django django-admin 和 项目manage.py程序 它俩是什么? ...

  6. Linux常见命令(一)

    三.常见linux命令: 命令提示符的解释: (1).组成(默认):[root@localhost~]# (2)[root@localhost~] root:系统当前登录账户名称,超级管理员为root ...

  7. 惊喜,重磅福利!免费开源ERP-企业信息化金矿

    Odoo,以前叫OpenERP,是比利时Odoo S.A.公司开发的一个企业应用软件套件,开源套件包括一个企业应用快速开发平台,以及几千个Odoo及第三方开发的企业应用模块.Odoo适用于各种规模的企 ...

  8. WebGIS中以version方式实现代码更新后前端自动读取更新代码的方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 前言 GIS代码进行更新后,由于用户前端已有缓存,导致更新的功能不 ...

  9. android java.lang.IllegalStateException: Circular dependencies cannot exist in RelativeLayout

    造成这个问题的原因是在xml文件中出现了重复依赖,何为重复依赖,如下:   以上便叫重复依赖 转载请标明出处:http://www.cnblogs.com/tangZH/p/8386978.html

  10. Git:八、Git自定义:忽略特殊文件&配置别名

    1..gitignore配置文件 1)防止加入Git或输入git status时显示,需要让Git忽略的文件: 程序编译生成的非原代码的文件 存放密码的文件 2)配置文件:.gitignore Git ...