代码风格

头文件的作用

申明将被程序用到的函数、变量和定义类型(包括:常量、类定义、模板定义……)


正确使用头文件

第1点: 

头文件中应该只包含函数和变量的申明,而不是定义。

例如:



在 main.cpp

 int mousex;

在 headers.h
 中

 extern int mousex;

如果多个cpp文件include了一个定义了变量的头文件,那么你将看到下面的错误信息

"error LNK2005: "int mousex" (?mousex@@3HA) already defined in headers.obj"

第2点:

在定义变量的地方初始化它们的值,而不是在申明它们的地方

例如:

在 main.cpp

 int mousey=0;

在 headers.h

 extern int mousey;

如果在头文件中初始化变量,那么编译器会认为这是一个定义,于是出现如下的错误信息:

"error C2086: 'int mousey' : redefinition"

第3点: 

为了避免重定义,最好把头文件用以下的定义包含起来(现在编译器如VC++.net也可以用#pragma once代替)

#ifndef __HEADERS_H__

#define __HEADERS_H__

.

code

.

#endif __HEADERS_H__


匈牙利命名法

为了帮助程序员记忆变量的类型,Charles Simonyi发明了匈牙利命名法。使用它可以一目了然的在浩瀚的代码海洋中识别出变量的类型。


前缀


类型


例如


b


布尔型


bGameOver


by


Byte或Unsigned Char


byChoice


c


Char


cYesNo


cx / cy


尺寸


cxWidth


dw


DWORD, Double Word 或Unsigned Long


dwCounter


fn


函数


fnGetMeOver


h


Handle


hWindow


i


int (Integer)


iCounter


l


Long


lCounter


n


Short int


nChange


p


指针


pMakeChoice


s


String


sName


sz


以0结尾的字符串


szName


w


WORD Unsigned int


wCounter


x, y


坐标


x

*参见: http://visualbasic.about.com/library/weekly/blhungarian.htm

文字间隔

文字的间隔对程序的结构和可读性非常重要

下面的两段程序哪个更容易读懂?

main()

{

char name[32]={"Red Cow Likes Milk"};

for(int t=0;t<16;t++)

{

t+=1;

for(int j=0;j<16;j++)

{

cout<<name[j];

}

cout<<name[t];

}

}

main()
{
char name[32] = {"Red Cow Likes Milk"};

  for( int t = 0; t < 16; t++ )

  {

    t+=1;

    for( int j = 0; j < 16; j++)

    {

      cout<<name[j];

    }

     cout<<name[t];

  }
}

接下来继续看

一行代码中的间隔


好的风格:
my.problem = FunkyG( my.bag + my.pipe * my.time);

不好的风格:
my.problem=FunkyG(my.bag+my.pipe*my.time);

变量名

选择最能说明变量作用的名字,如:

fMoneyAmount
fHitPoints
vDirection

但如果去掉字母中的元音后

fMnyAmnt
fHtPnts
vDirctn

非常混淆不是吗?还不如试试只用前三个字母

vDirctn = vDir

过长的变量或函数名也是不可取的(有时简直就是噩梦)

void RotationToFloatAngleDegreeDirection(float fRotation, Vector_t * vDirection); // 不好

void RotationToDirection(float fRotation, Vector_t * vDirection); // 好

void TheFunctionThatSetsAVariableAlwaysToZero(int * iVar); // 不好
void VarToZero(int * iVar); // 好

float TimeInCanadiaInHours(); // 不好
float Time_Canadia(); // 好

在程序中定义变量


全局变量:

议尽可能少用全局变量,因为不正确的是用很容易引起和局部变量的混淆,如:

int j=756;

void printJandQ(int Q)

{

  int j=0;

  cout << j << q;

}

局部变量的定义:

尽量不要在函数中间定义变量,这会导致可读性的下降和变量作用范围的混淆,在每个函数的开始处定义它的局部变量。(译者注:对于这条建议本人持保留态度)


静态分配和动态分配:

不好的风格:

struct DosFile_t

{

  char * name;

  int id;

}

如果一个字符串的长度有限制最好使用静态分配,如下:

struct DosFile_t

{

  char name[8];

  int id;

}

在初始化变量时不要忘记付值:

不要认为一个变量在定义出来后就已经被付值为0了,记住手动付0给它们,如果是结构就用memset将其全部清0

int j=0;

DosFile_t * dfFileList;

dfFileList=(dfFile*)malloc(sizeof(dfFileList)*8);

memset(dfFile,0, sizeof(dfFileList)*8);

时间: 2024-09-20 04:04:24

代码风格的相关文章

myeclipse 代码风格问题

问题描述 myeclipse 代码风格问题 我编辑的时候代码风格是这样的 var traceMainAction = path + "/traceMainAction"; // 进展追踪主页 var turnProblemMainAction = path + "/turnProblemMainAction"; // 进展追踪 问题追踪主页 var getTraceVerAction = path + "/getTraceVerAction";

Medium 内部使用 css/less 的代码风格指南

本文讲的是Medium 内部使用 css/less 的代码风格指南, Medium 对代码风格使用了 LESS 的一种严格子集.这个子集包含变量和混合指令,但是没有别的(嵌套等等). Medium 的常规命名改编自 SUIT CSS 框架中正在进行的工作.这就是说,它依赖于 结构化类名 和 有意义的连字符 (即不使用连字符只为了把单词分开).这用来解决目前遇到的将 CSS 应用到 DOM 上的限制和在类之间更好的交流. 目录 JavaScript Utilities(工具) u-utilityN

JavaScript代码风格要素

1920年,由威廉·斯特伦克(William Strunk jr .)撰写的<英语写作手册:风格的要素(The Elements of Style)>出版了,这本书列举了7条英文写作的准则,过了一个世纪,这些准则并没有过时.对于工程师来说,你可以在自己的编码风格中应用类似的建议来指导日常的编码,提高自己的编码水平. 需要注意的是,这些准则不是一成不变的法则.如果违背它们,能够让代码可读性更高,那么便没有问题,但请特别小心并时刻反思.这些准绳是经受住了时间考验的,有充分的理由说明:它们通常是正确

.Net 项目代码风格要求小结_实用技巧

PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# 代码风格要求1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,不需要加注释:否则需要添加注释. 当添加注释时,添加方式如下图所示: 1.2 类型(类.结构.委托.接口).字段.属性.方法.事件的命名 优先考虑英文,如果英文没有合适的单词描述,可以使用拼音,使用中文

当前流行的JavaScript代码风格指南_javascript技巧

JavaScript 没有一个权威的编码风格指南,取而代之的是一些流行的编码风格: 复制代码 代码如下: Google的JavaScript风格指南(以下简称Google) http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml NPM编码风格(以下简称NPM) https://npmjs.org/doc/coding-style.html Felix的Node.js风格指南(以下简称Node.js) http:

JQuery入门—JQuery程序的代码风格详细介绍_jquery

<jQuery权威指南>第1章jQuery开发入门,本章通过循续渐进的方式,先从jQuery的基础概念入手,介绍jQuery库的下载,引入简单应用方法:后部分侧重于jQuery控制DOM对象和页面CSS样式的介绍,通过一些简单的小示例,使读者对jQuery在页面中的功能应用有一个大致的了解,为下一章节进一步学习jQuery库的详细对象和方法奠定基础.本节为大家介绍jQuery程序的代码风格.  1.1.5 jQuery程序的代码风格 1."$"美元符的使用 在jQuery程

项目代码风格要求

原文 http://www.cnblogs.com/JimmyZhang/archive/2013/06/05/3118936.html PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<项目代码风格要求>,供大家参考. 1. C# 代码风格要求 1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,则不需要加注释:否则必须添加注释. 当添加注释时,添加方式如下图所示:

php好代码风格的阶段性总结_php技巧

本文总结了php好代码的风格,分享给大家供大家参考,具体如下: 1.避免使用魔数 if($age<18){ } 这个18不太明白为什么要这样子. 可以将28定义在一个变量里面,这个变量命名表明了这个值的含义 $adult_age = 18;//成年的分界点年龄 if($age<$adult_age){ } 2.函数的返回结果:不要使用一个变量来存储返回结果 一旦你知道了返回结果,就应该马上返回.这样做的好处,是可以减少错误. 3.函数带有很多的参数.不要超过三个 如果参数很多,尽量聚合成一个m

matplotlib 代码风格

        当查看 matplotlib 官方文档和示例时,你会发现不同的编码风格和使用模式.这些风格是完全有效的,各有其优缺点.       几乎所有的例子都可以转换成另一种风格,以实现相同的结果.当然,需要注意的是不要把自己的代码风格搞混.       两种不同的风格,都受官方支持.           下面是使用 matplotlib 的首选方式.首选 pyplot 风格,顶部的导入脚本通常是: import matplotlib.pyplot as plt import numpy

AngularJS之代码风格36条建议【一】(九)

前言 其实在新学一门知识时,我们应该注意下怎么书写代码更加规范,从开始就注意养成一个良好的习惯无论是对于bug的查找还是走人后别人熟悉代码都是非常好的,利人利己的事情何乐而不为呢,关于AngularJS中的代码风格分为几节来阐述.希望对打算学习AngularJS的新手或者已经在路上的老手有那么一丢丢的帮助也是可以的. 普遍规则 tips 01(定义一个组件脚本文件时,建议此文件的代码少于400行) (1)有利于单元测试和模拟测试. (2)增加可读性.可维护性.避免和团队在源代码控制上的冲突. (