网站制作新技术,建局域网网站,武邑网站建设价格,网站工程工资一般多少钱全部来源于网络#xff0c;我感觉好的就复制粘贴了。【你必需防止头文件重复编译。】PROJECT_PATH_FILE_H_foo/src/bar/baz.h #ifndef FOO_BAR_BAZ_H_【inline函数要尽量简单。】函数最好小于10行。函数内包含循环、switch语句#xff0c;不能定…全部来源于网络我感觉好的就复制粘贴了。【你必需防止头文件重复编译。】PROJECT_PATH_FILE_H_foo/src/bar/baz.h #ifndef FOO_BAR_BAZ_H_【inline函数要尽量简单。】函数最好小于10行。函数内包含循环、switch语句不能定义为inline。过长inline函数体放在inl.h文件中。【include的顺序】当前c文件对应的头文件-C语言系统文件-C系统文件-第三方库头文件-工程公用头文件。【尽量减少头文件的引用使用前置声明。】【空格替换Tab每次缩进2个空格。】【你每行代码的文本最多只允许80个字符宽。】【要少用非ASCII字符即使用的话也必须用UTF-8格式。】【空的循环体应该用{}或continue而不是单独的一个分号。】【不要用不必要的括号括起返回表达式。】【预处理指令应该总在行首不要缩进。】【定义一个函数时参数顺序是输入参数然后是输出参数。】【一个类可以被定义在另一个类内它也被称为成员类。】class Foo {private:// Bar is a member class, nested within Foo.Bar是Foo中嵌套的成员类。class Bar {...};};【你的类的定义应该从公开成员部分开始接着是受保护成员最后是私有成员。如果哪部分是空的就省略掉。】类中各部分按public、protected和private的顺序每个关键字缩进1个空格。在每部分中声明通常应该按下面的顺序排列1. 自定义别名和枚举2. 常量静态常量3. 构造函数4. 析构函数5. 方法包括静态方法6. 数据成员除了静态常量成员【所有按引用传递的参数必须被标记为常量。】在C中如果一个函数需要修改一个变量就必须使用指针参数。【我们不使用C的异常。】我并不认同不过它的优点写得不错优点1. 异常允许上层应用程序决定如何处理底层嵌套函数出现的“不该发生“的错误而不是用模糊且易错的错误码记录 。2. 大数数其它现代语言中都包含异常。在C中使用异常有助于保持与
Python
、
Java
和其它与C类似的语言的兼容。3. 一些第三方C库使用异常如果禁用异常的话就很难与这些库整合了。4. 异常是处理构造函数失败的唯一方法。我们能用工厂函数或Init()来模拟这个特性但这些分别需要进行堆的分配或是新增一个“无效”状态。5. 在测试框架内异常很容易使用。【避免使用RTTI。】【不要使用C风格的转换。改用C风格的转换。】1. 用static_cast进行数值转换或是显式的将一个类的指针转为它的子类的指针。2. 用const_cast去掉常量性质。3. 用reinterpret_cast进行不安全的指针间转换或整型转指针操作。只有在你清楚操作的含义及可能的后果时才能使用这种转换。【一个变量在自加i或i或自减--i或i--而没有用到表达式的值时必须确定到底用哪种形式。】【能用常量的时候都要用常量。】【C的内建整数类型中只使用int。如果程序中需要用到其它大小的变量用stdint.h中带精度的整数类型如int16_t。】整型类型中只有int可以用。合适的话你最好用标准类型如size_t和ptrdiff_t。我们经常用int用在不会特别大的整数上如循环计数器。这时要用POD类型int。你应该假设int至少有32位但不要假设它超过32位。如果你需要用64位整数就用int64_t或uint64_t。对于可能会很大的整数用int64_t。你不应该用无符号整型如uint32_t除非你在表示一个位组而不是数字或是你需要定义二进制补码溢出。尤其是不要为了指出数值永不为负而使用无符号数。你应该用断言。【不要用无符号数。】糟糕的bug会在有符号数和无符号数比较时发生。所以用断言来提醒变量是非负的。不要用无符号类型。【代码应该同时兼容32位和64位。要考虑到打印、比较、以及结构体对齐等问题。】【用内联函数、枚举量、和常量来代替宏。】使用宏就意味着你看到的代码和编译器最终看到的代码是不一样的。这会带来难以预料的行为特别是因为宏是全局作用域生效的。不要用宏来展开性能要求高的代码改用内联函数。不要用宏来存储一个常数改用常量。不要用宏来为一个名字很长的变量起个较短的别名改用引用。不要用宏来进行条件编译改用……好吧不要进行条件编译除非是用#define来避免多次引入头文件。用宏会导致很难进行测试。下面的使用模式能避免使用宏会带来的很多问题如果你要用宏就要尽量遵循这些准则1. 不要在.h文件中定义宏。2. 在马上要用到宏的地方才#define宏用完立刻#undef。3. 不要#undef一个现有的宏仅仅因为自己的宏要用它的名字不如为自己的宏取一个独特的名字。4. 不要用那些展开后会导致C构造不稳定的宏如果非要用就在文档中说明。5. 不推荐使用##生成函数/类/变量的名字。【0用于整数0.0用于浮点数nullptr用于指针’\0’用于字符。】【在可以的地方用sizeof(变量名)来代替sizeof(类型名)。】用sizeof(变量名)是因为如果变量的类型改变了它也能跟着更新。sizeof(类型名)在一些场合更有意义但还是要避免这么用因为变量类型改变后它没有跟着同步改变。【不要在局部变量之外的地方用auto。】程序员需要懂得auto和const auto间的区别否则会在不想复制时出现复制。【只用Boost库集中被认可的部分。】元模板编程虽然很装逼但是要记得你不是一个人。【只使用C11也称为C0x中被认可的库和语言扩展。在用C11特性前先考虑一下可移植性。】只用C11中被认可的库和语言特性。当前只认可下列特性1. auto只用于局部变量。2. “”现在优先匹配模板参数表的结束而不是输出操作符。3. 以范围为基础的 for 循环。4. 整数字面值LL和ULL后缀以产生不少于64位的类型。5. 可变参数宏但注意不鼓励用宏。6. 所有声明于algorithm和numeric中的新STL算法除了声明中包含初始化列表的min、max和minmax版本。7. 用局部类型充当模板参数 。8. nullptr和nullptr_t。【永远不要用省略字母的缩写。】int error_count; // Good.int error_cnt; // Bad.【文件名应该全都用小写中间用“-”或“_”当分隔符。根据你的项目的惯例。如果没有固定的习惯的话推荐用“_”。】【C文件应该以.cc结尾头文件以.h结尾。】【类型名以大写字母开头包含typedef且其中每个词第一个字母都大写不用下划线MyExcitingClassMyExcitingEnum。】【变量名都是小写的每个词之间用下划线连接。类的成员变量名结尾有个下划线。例如my_exciting_local_varialbemy_exciting_member_variable_。】string table_name; // OK - uses underscore.string tablename; // OK - all lowercase.string tableName; // Bad - mixed case.【类数据成员也被称为实例变量或成员变量的名字都是小写的可以像通常的变量名一样带下划线但结尾总要有个下划线。】string table_name_; // OK - underscore at end.string tablename_; // OK.【对于全局变量没有特别要求少用就好但如果你要用考虑加个g_前缀或其它能很容易的区分全局变量与局部变量的标记。】【常规函数的名字大小写混合取值和设值函数要与对应的变量名匹配MyExcitingFunction()MyExcitingMethod()my_exciting_member_variable()set_my_exciting_member_variable()。】【注释每个文件的开始是版权公告其后是文件内容描述。】每个文件都应包括许可证信息。为项目选择适合的许可证版本如Apache2.0、BSD、LGPL、GPL。【如果你习惯了通行的Windows风格就很有必要重申一些你可能忘记的规范】1. 不要用匈牙利命名法例如将整数命名为iNum。用谷歌的命名规范源代码文件扩展名用.cc。2. Windows定义了许多它独有的内置类型的别名如DWORD和HANDLE等等。在你调用Windows API时鼓励用这些类型。即使这样你也应该尽量使用C的类型名。例如用constTCHAR*去替代LPCTSTR。3. 用VC编译代码时将警告等级调到3或更高并将所有警告都视作错误。4. 不要用#pragma once改用标准的头文件守卫规则。在#define中的路径要相对于项目根目录。5. 事实上不要用任何不标准的编译器扩展如#pragma和__declspec除非你必须得这么做。用__declspec(dllimport)和__declspec(dllexport)是允许的但你必须通过宏来调用它们如DLLIMPORT和DLLEXPORT 这样别人就可以在分享使用此代码时方便的禁用这些扩展了。【但是在Windows中还是有些场合我们必须打破某些规则】1. 通常我们禁止使用多个有实现的继承但在用COM和一些ATL/WTL类时需要这么做。这时你就可以使用多个有实现的继承了。2. 尽管你不应该在自己的代码中用到异常但异常被广泛用在ATL和一些VC的STL实现中。用ATL时你应该定义_ATL_NO_EXCEPTIONS来禁用异常。你应该研究一下是否也可以禁用STL中的异常如果不能的话启用异常也没关系。注意这只是为了编译STL自己的代码中仍然不允许用异常。3. Windows代码文件中通常都包括预编译好的头文件stdafx.h或precompile.h。为了让你的代码方便与其它项目分享避免显式include此文件除了precompile.cc用/FI编译选项来自动包括此文件。4. 资源头文件通常被命名为resource.h且只包括宏不需要遵守这些风格规范。