9秒学院游戏公司内部代码规范(实用)
记住你的源代码是写给人看的,而不是编译器。注释要简单扼要,确保自己以后一看就懂.
.函数参数,如果是指针,则不用const,比如 int* lpoint否则const& ,比如const String& str
头文件和源文件
头文件用 .h做扩展名(不用hpp 等)
源文件用 .cpp做扩展名 (不用 cc,cxx等)
不在头文件中使用using namespace
预编译头
工程尽量采用预编译头,加快编译速度
工程设置:
把输出文件目录配置到一个上层目录,避免这些文件和源代码加杂在一起
整理起来也更加方便
目录结构
比如
| Project //Project folder
|----------| source //Source files folder
|----------|----------| Project 1 //Project 1 source file
|----------|----------| Project 2 //Project 2 source file
|----------| obj //Temp folder
|----------|----------| debug //Temp folder debug version
|----------|----------| release //Temp folder release version
|----------| bin //Exe, and dll runteime files
|----------|----------| debug //Debug version
|----------|----------| release //Release version
|----------| include //Header files
|----------| lib //Library files
|----------| depend //Depend third partition library
Unicode
1. 项目工程全部设置成UNICODE工程,有些第三方库没办法改的除外
2. 所有涉及到输出显示的字符串全部使用Unicode编码,缺省采用utf16编码,特殊的地方没法用utf16的,采用utf8编码
比如 void PlayerChat(const wchar_t* chatmessage);
3. 代码里直接写utf16字符串的文件采用保存成utf16 编码格式
比如 const wchar_t* szMsg = L“Hello world!”;
否则在某些编译器下面输出将会是乱码
4. 所有的源代码文件如果有中文注释的全部保存成utf8格式
宏
除非必要,代码里不允许用宏
比如 用宏定义常量
#define SOME_TIME 1000
用宏定义函数
#define min(x,y) ((x)<(y) ? (x) : (y))
用宏定义类型
#define DWORD unsiged int
注释
注释尽量写英文,实在不行才能写中文
代码的风格尽量能够自注释,也就是说看到代码就知道什么意思
比如
class TextHandler
{
public:
enum NewLineDisposition { sendNewLine, noNewLine };
void sendText( const std::string &, NewLineDisposition );
};
void f()
{
TextHandler t;
t.sendText( "Hello, ", TextHandler::noNewLine );
t.sendText( "world", TextHandler::sendNewLine );
}
英文命名
所有的东西的命名不允许用中文拼音
int shuLiang = 0 ;
名字空间
所有的有可能被别的工程使用到的类全部要包含在至少一个名字空间里
如:
namespace wk{
class SomeClass;
}
类和结构的命名
类名首字母大写,后面的单词首字母也大写
比如
class SomeClass;
枚举命名
尽量不要定义全局的枚举(c++的枚举是全局的),尽量放到相应的类和结构里面
这个在c++里叫做enum hack
不好的做法
enum SomeType
{
Type1,
Type2,
Type3,
}
好的做法
Class SomeClassOfSomeType
{
pulbic:
enum SomeType
{
Type1,
Type2,
Type3,
}
}
或者采用枚举类的做法
接口
所有的接口定义以大写的I开始
比如:
struct ISomeClass
{
public:
virtual void Functiion() = 0;
}
全局变量
尽量不要定义全局变量(存在构造,析构顺序问题)
实在要定义变量以小写的字母开头g_
局部变量
局部变量一小写字母开头
比如 SomeClass someClass;
int count;
类成员变量
私有变量
以小写的m加下划线开头 m_
比如:
class SomeClass
{
private:
SomeClass* m_next;
}
公有变量
原则上类里不允许定义公有变量,除非这个变量有简单的属性的概念
定义的时候公有变量以小写字母开头,不带前缀
class SomeClass
{
public:
int count;
}
C++不支持属性,所以这种情况写成内联的get,set函数会更好,get,set小写
int getCount(){
return m_count;
}
void setCount(int value){
m_count = value;
}
布尔变量
布尔变量应该包含Is
比如
bool IsStart;
静态变量
静态变量以小写的s加下划线 开头 s_
static int s_TotalCount;
函数名
所有函数以大写字母开头,特殊情况除外
比如有属性概念的get,set函数
void DoSomeThing();
函数参数
函数参数变量全部小写
比如:
void PlayerChat( const wchar_t* chatmessage);
const的使用
1. const 参数
bool TestStringValid( const wchar_t* teststring);
bool TestStringValid( const std::wtring& teststring);
2. const 函数
任何不会修改数据成员的函数都定义成const 函数,这样可以让编译器为我们做更多的事
int getCount() const;
记住你的源代码是写给人看的,而不是编译器。注释要简单扼要,确保自己以后一看就懂.
.函数参数,如果是指针,则不用const,比如 int* lpoint否则const& ,比如const String& str
头文件和源文件
头文件用 .h做扩展名(不用hpp 等)
源文件用 .cpp做扩展名 (不用 cc,cxx等)
不在头文件中使用using namespace
预编译头
工程尽量采用预编译头,加快编译速度
工程设置:
把输出文件目录配置到一个上层目录,避免这些文件和源代码加杂在一起
整理起来也更加方便
目录结构
比如
| Project //Project folder
|----------| source //Source files folder
|----------|----------| Project 1 //Project 1 source file
|----------|----------| Project 2 //Project 2 source file
|----------| obj //Temp folder
|----------|----------| debug //Temp folder debug version
|----------|----------| release //Temp folder release version
|----------| bin //Exe, and dll runteime files
|----------|----------| debug //Debug version
|----------|----------| release //Release version
|----------| include //Header files
|----------| lib //Library files
|----------| depend //Depend third partition library
Unicode
1. 项目工程全部设置成UNICODE工程,有些第三方库没办法改的除外
2. 所有涉及到输出显示的字符串全部使用Unicode编码,缺省采用utf16编码,特殊的地方没法用utf16的,采用utf8编码
比如 void PlayerChat(const wchar_t* chatmessage);
3. 代码里直接写utf16字符串的文件采用保存成utf16 编码格式
比如 const wchar_t* szMsg = L“Hello world!”;
否则在某些编译器下面输出将会是乱码
4. 所有的源代码文件如果有中文注释的全部保存成utf8格式
宏
除非必要,代码里不允许用宏
比如 用宏定义常量
#define SOME_TIME 1000
用宏定义函数
#define min(x,y) ((x)<(y) ? (x) : (y))
用宏定义类型
#define DWORD unsiged int
注释
注释尽量写英文,实在不行才能写中文
代码的风格尽量能够自注释,也就是说看到代码就知道什么意思
比如
class TextHandler
{
public:
enum NewLineDisposition { sendNewLine, noNewLine };
void sendText( const std::string &, NewLineDisposition );
};
void f()
{
TextHandler t;
t.sendText( "Hello, ", TextHandler::noNewLine );
t.sendText( "world", TextHandler::sendNewLine );
}
英文命名
所有的东西的命名不允许用中文拼音
int shuLiang = 0 ;
名字空间
所有的有可能被别的工程使用到的类全部要包含在至少一个名字空间里
如:
namespace wk{
class SomeClass;
}
类和结构的命名
类名首字母大写,后面的单词首字母也大写
比如
class SomeClass;
枚举命名
尽量不要定义全局的枚举(c++的枚举是全局的),尽量放到相应的类和结构里面
这个在c++里叫做enum hack
不好的做法
enum SomeType
{
Type1,
Type2,
Type3,
}
好的做法
Class SomeClassOfSomeType
{
pulbic:
enum SomeType
{
Type1,
Type2,
Type3,
}
}
或者采用枚举类的做法
接口
所有的接口定义以大写的I开始
比如:
struct ISomeClass
{
public:
virtual void Functiion() = 0;
}
全局变量
尽量不要定义全局变量(存在构造,析构顺序问题)
实在要定义变量以小写的字母开头g_
局部变量
局部变量一小写字母开头
比如 SomeClass someClass;
int count;
类成员变量
私有变量
以小写的m加下划线开头 m_
比如:
class SomeClass
{
private:
SomeClass* m_next;
}
公有变量
原则上类里不允许定义公有变量,除非这个变量有简单的属性的概念
定义的时候公有变量以小写字母开头,不带前缀
class SomeClass
{
public:
int count;
}
C++不支持属性,所以这种情况写成内联的get,set函数会更好,get,set小写
int getCount(){
return m_count;
}
void setCount(int value){
m_count = value;
}
布尔变量
布尔变量应该包含Is
比如
bool IsStart;
静态变量
静态变量以小写的s加下划线 开头 s_
static int s_TotalCount;
函数名
所有函数以大写字母开头,特殊情况除外
比如有属性概念的get,set函数
void DoSomeThing();
函数参数
函数参数变量全部小写
比如:
void PlayerChat( const wchar_t* chatmessage);
const的使用
1. const 参数
bool TestStringValid( const wchar_t* teststring);
bool TestStringValid( const std::wtring& teststring);
2. const 函数
任何不会修改数据成员的函数都定义成const 函数,这样可以让编译器为我们做更多的事
int getCount() const;