# Teddy项目UserLog文件为例:
# Group.1
UserLog.c & TedUserLog.c
# Group.2
userlog.c & teduserlog.c
# Group.3
userlog.c & ted_userlog.c
# Group.4
user_log.c & ted_user_log.c
# Group.5
user-log.c & ted-user-log.c
tip.1:如果需要将源码直接发布,可以使用项目名做前缀,防止链接时文件名冲突(msvc好像能自动重命名冲突的.obj文件,但是跨平台程序不能依赖这个特性);tip.2:各组文件名风格都没有明显的缺点,但要注意在区分大小写的系统上UserLog.c和userlog.c是两个文件;
1.3.类型命名
/*
** 基本数据类型的重定义,小写比首字母大写更有利于延长Shift寿命,
** 但也更容易产生命名冲突。
*/
typedef unsigned char byte;
typedef unsigned char byte_t;
typedef unsigned char Byte;
typedef unsigned char Byte_t;
/*
** 类与结构体常见的风格是采用PascalCase,不推荐使用camelCase
** 这种怪异的风格。
*/
class HashTable { ...
class hash_table { ...
struct FileInfo { ...
struct file_info { ...
/* C语言常见到的风格还有结构体名称加'_t'后缀 */
struct fileinfo_t { ...
struct FileInfo_t { ...
/* 枚举命名常见PascalCase风格 */
enum FileFlags { ...
enum file_flags { ...
tip.1:c语言没有命名空间,为防止命名冲突,常见做法是将项目名或其缩写作为类型名称前缀;
tip.2:类,结构体,枚举的命名风格尽量保持一致;
1.4.命名空间命名
/* 一般使用项目名称,风格看喜好。 */
namespace my_project { ...
namespace MyProject { ...
tip.1:确保命名空间不会和常用的库冲突;
1.5.函数和变量命名
/*
** 在函数和变量命名风格上PascalCase,camelCase,
** snake_case三足鼎立,选择凭喜好。
*/
void FunctionName(void) { ...
void functionName(void) { ...
void function_name(void) { ...
long VarName;
long varName;
long var_name;
/*
** tip.1:snake_case在名称比较长时可读性较好;
*/
long variable_names_in_snake_case;
long VariableNamesInPascalCase;
long variableNamesInCamelCase;
/*
** tip.2:PascalCase和camelCase在函数中的区分度较好,
** 在快速扫描代码逻辑的时候不易被其它符号所干扰。
*/
long FabonacciFunction(long rabbitNums)
{
if (rabbitNums < 2) {
return rabbitNums;
}
long resultOne = FabonacciFunction(rabbitNums - 1);
long resultTwo = FabonacciFunction(rabbitNums - 2);
return resultOne + resultTwo;
}
long fabonacci_function(long rabbit_nums)
{
if (rabbit_nums < 2) {
return rabbit_nums;
}
long result_one = fabonacci_function(rabbit_nums - 1);
long result_two = fabonacci_function(rabbit_nums - 2);
return result_one + result_two;
}
tip.3:如果类需要兼容标准库迭代器或是要支持range for,begin()和end()函数会破坏PascalCase风格的一致性;










