C Programming Style 总结
对材料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);
}
总结:
- 在程序中避免出现Magic Number,使用宏定义(#define)代替,宏定义全部大写。
- 变量在定义时即赋予初值,使用驼峰式(numTens)或_(num_tens)都可以,保持同一种风格。
- 适当使用空格使程序清晰。
- 花空号{}的使用格式,{ 在同一行但有空格,} 单独一行。
- 像是if while for等与后面的 ( 有一个空格。
- 在程序开始前介绍信息(作用、作者等)
- 先检查可能失败项。
C Programming Style 总结的更多相关文章
- [转] 編程風格要素-The Elements of Programming Style 中文英文中英對照
转自: http://www.loliman3000.com/tech/2fe33ce32906f0302412881.php 下面的程序風格規則提煉自Brian Kernighan和P. J. Pl ...
- 【转载】The Elements of Programming Style之代码风格金科玉律
原始日期: 2017-02-06 16:20 <The Elements of Programming Style >是一本很古老的书.尽管 Fortran 我们不太使用,尽管新奇的语言层 ...
- [转] Matlab编程规范(MATLAB Programming Style Guidelines)
转自: Jerry Zitao Liu的博客 主要是参考了下面这篇文章,简洁总结在这里. MATLAB Programming Style Guidelines 简洁总结如下: 表示object的数量 ...
- Java Programming Language Enhancements
引用:Java Programming Language Enhancements Java Programming Language Enhancements Enhancements in Jav ...
- Google Java Style Guide
https://google.github.io/styleguide/javaguide.html Table of Contents 1 Introduction 1.1 Terminolog ...
- 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 ...
- 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 ...
- 类型检查和鸭子类型 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 ...
- Flux 普及读本
话说当时做 APP 时,三月不知肉味,再次将眼光投放前端,有种天上一天,地下一年的感觉. Flux 是一种思想 了解的最好方式当然是看Flux官方文档了.React 中文站点也能找到对应的翻译版本,但 ...
随机推荐
- BaseServlet的编写
在BaseServlet之前,需要提及工厂factory去管理dao以及service,以及页面转发或重定向的管理 1.创建一个工厂类,以及一个资源文件,资源文件中以键值对的形式去存储key,以及对应 ...
- CentOS7 yum方式安装MySQL5.7
转载至博客:https://www.cnblogs.com/bigbrotherer/p/7241845.html 在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要 ...
- 基本数据类型 列表 list
今日内容一.列表======================================基本使用======================================1.用途:用来记录同种属 ...
- 如何解决升级到Dynamics 365后有很多的Sandbox的WorkerProcess并导致异常?
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复254或者20170505可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- java StringBuilder 和 StringBuffer
1, 相对于 String 来说, StringBuilder 和 StringBuffer 均是可变的 2, StringBuilder 线程不安全, StringBuffer 线程安全 3, 运行 ...
- vue实现表计监测界面
已经好几个月没有更新博客了,因为最近太忙,忙得连写博客的时间都没有.上班赶项目开启996模式,下班要去练车考驾照,一边还在赶书稿,一边还接了私活.不由得感叹:年纪大了,再也经不起那么折腾..... 每 ...
- 动态BGP和静态BGP的含义与区别
1.在华为云上选购虚拟机时,会让用户选择动态BGP还是静态BGP, 全动态BGP可根据设定的寻路协议第一时间自动优化网络结构,以保持客户使用的网络持续稳定.高效. 静态BGP中的网络结构发生变化,运营 ...
- ionic3 Alert组件的使用方法
html页面 <button ion-button color="danger" class="button-block button-round-ios" ...
- android 开发之 ListView 与Adapter 应用实践
在开发android中,ListView 的应用显得非常频繁,只要需要显示列表展示的应用,可以说是必不可少,下面是记录开发中应用到ListView与Adapter 使用的实例: ListView 所在 ...
- Python使用Plotly绘图工具,绘制散点图、线形图
今天在研究Plotly绘制散点图的方法 使用Python3.6 + Plotly Plotly版本2.0.0 在开始之前先说说,还需要安装库Numpy,安装方法在我的另一篇博客中有写到:https:/ ...