
鸣谢
本文档的每一章节都应该感谢 Dan Ruder 微软 。对本文档进行
了斟字酌句的查阅,并根据其 余年的编程经验提供了大量的珍贵评论。我很荣幸能与他共事。
我同样感谢微软的四位经理,感谢他们对该项目的一贯支持。他们是 Vivian Luo,Allen
Ding,Felix Wu和Mei Liang。
同时,如果没有如下一站式代码示例库项目的关键成员的辛勤付出,本文档必定不会具有现在的
技术深度以及完整度,我在这里要感谢他们:
!
"# $ %&#
本文档部分章节参考自一些微软产品组的编程规范。感谢他们的慷慨共享。
本编程规范在不断改善。如果您发现某些最佳实践或者话题并没有涵盖在本文档中,请告知我们
一站式示例代码库项目组,以不断充实改善本文档。我期待着您的参与。
声明
本编程规范文档以“如是”提供,无论明示或暗示都不包含任何形式保证,但并不限制适用于特殊
目的的默认担保。
当您编写 '#(()'#*)'+,-.代码时,敬请参考或使用本文档。但是,我们希望您能通过
!/01,0
告知我们您正在使用本文档,或给出任何改进建议。
目录
1 概览...........................................................................................................................................1
2,2 原则和主旨,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2
2, 术语,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

2 通用编程规范............................................................................................................................3
,2 明确和一致,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3
, 格式和风格,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3
,3 库的使用,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4
,5 全局变量,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4
,4 变量的声明和初始化,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6
,6 函数的声明和调用,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7
,7 语句,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,8
,8 枚举,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9
,9 空格,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,25
,2 大括号,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,24
,22 注释,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,27
,2 代码块,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6
3 C++ 编程规范...........................................................................................................................27
3,2 编译器选项,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7
3, 文件和结构,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9
3,3 命名规范,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3
3,5 指针,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35
3,4 常量,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35
3,6 类型转换,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34
3,7 :;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,36
3,8 字符串,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37
3,9 数组,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,38
3,2 宏,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,39
3,22 函数,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5
3,2 结构体,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,53
3,23 类,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,55
3,25 #<,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4
3,24 动态分配,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,42
3,26 错误和异常,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4
3,27 资源清理,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,44
3,28 控制流,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,48
4 .NET 编码规范..........................................................................................................................61
5,2 类库开发设计规范,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,62

5, 文件和结构,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,62
5,3 程序集属性,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,62
5,5 命名规范,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,62
5,4 常量,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,64
5,6 字符串,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,64
5,7 数组和集合,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,67
5,8 结构体,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,69
5,9 类,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7
5,2 命名空间,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,75
5,22 错误和异常,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,75
5,2 资源清理,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,77
5,23 交互操作,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9
• 概览
本文档为一站式示例代码库项目组所使用的 #((以及,-.编码规范。该规范源自于产品开发过程
中的经验,并在不断完善。如果您发现一些最佳实践或者话题并没有涵盖在本文档中,请联系我
们一站式示例代码库项目组,以不断充实完善本文档。
任何指导准则都可能会众口难调。本规范的目的在于帮助社区开发者提高开发效率,减少代码中
可能出现的 =,并增强代码的可维护性。万事开头难,采纳一个不熟悉的规范可能在初期会有
一些棘手和困扰,但是这些不适应很快便会消失,它所带来的好处和优势很快便会显现,特别是
在当您接手他人代码时。
• 原则和主旨
高质量的代码示例往往具有如下特质>
易懂–代码示例必须易读且简单明确。它们必须能展示出重点所在。示例代码的相关部分
应当易于重用。示例代码不可包含多余代码。它们必须带有相应文档说明。
正确性–示例代码必须正确展示出其欲告知使用者的重点。代码必须经过测试,且可以按
照文档描述进行编译和运行。
一致性–示例代码应该按照一致的编程风格和设计来保证代码易读。同样的,不同代码示
例之间也应当保持一致的风格和设计,使使用者能够很轻松的结合使用它们。一致性将我
们一站式示例代码库优良的品质形象传递给使用者,展示出我们对于细节的追求。
流行性–代码示例应当展示现行的编程实践,例如使用?!,错误处理,防御式编程
以及可移植性。示例代码应当使用当前推荐的运行时库和 "@ 函数,以及推荐的项目和生
成设置。
可靠性–代码示例必须符合法律,隐私和政策标准和规范。不允许展示入侵性或低质的编
程实践,不允许永久改变机器状态。所有的安装和执行过程必须可以被撤销。
安全性示例代码应该展示如何使用安全的编程实践:例如最低权限原则,使用运行时库
函数的安全版本,以及 推荐的项目设置。

合理使用编程实践,设计和语言特性决定了示例代码是否可以很好满足上述特性。本编程规范致
力于帮助您创建代码示例以使使用者能够作为最佳实践来效仿和学习。
• 术语
在整个文档中,会有一些对于标准和实践的推荐和建议。一些实践是非常重要的,必须严格执行,
另一些指导准则并不一定处处适用,但是会在特定的场景下带来益处。为了清楚陈述规范和实践
的意图,我们会使用如下术语。
术语 意图 理由
一定请... 该规范或实践在任何情况下都应该遵守。如果您
认为您的应用是例外,则可能不适用。
该规范用于减少 =。
一定不要... 不允许应用该规范或实践。
您应该... 该规范和实践适用于大多数情况。
该规范用于统一编程风格,保
持一致和清晰的风格。
您不应该.. 不应该应用该规范或实践,除非有合理的理由。
您可以… 该标准和规范您可以按需应用。 该规范可用于编程风格,但不
总是有益的。
• 通用编程规范
这些通用编程规范适用于所有语言–它们对代码风格,格式和结构提供了全局通用的指导。
• 明确性和一致性
一定请确保代码的明确性,易读性和透明性。编程规范致力于确保代码是易懂和易维护的。没有
什么胜于清晰、简洁、自描述的代码。
一定请确保一旦应用了某编程规范,需在所有代码中应用,以保持一致性。
• 格式和风格
一定不要使用制表符。不同的文字编辑器使用不同的空格来生成制表符,这就带来了格式混乱。
所有代码都应该使用 5 个空格来表示缩进。
可以配置 '%!文字编辑器,以空格代替制表符。
您应该 限制一行代码的最大长度。过长的代码降低了代码易读性。为了提高易读性,将代码长
度设置为 78 列。若 78 列太窄,可以设置为 86 或者 9。
Visual C++ sample:
Visual C# 示例:
Visual Basic sample:
一定请在您的代码编辑器中使用定宽字体,例如#-A。

• 库的使用
一定不要引用不必要的库,包括不必要的头文件,或引用不必要的程序集。注重细节能够减少项
目生成时间,最小化出错几率,并给读者一个良好的印象。
• 全局变量
一定请尽量少用全局变量。为了正确的使用全局变量,一般是将它们作为参数传入函数。永远
不要在函数或类内部直接引用全局变量,因为这会引起一个副作用:在调用者不知情的情况下改
变了全局变量的状态。这对于静态变量同样适用。如果您需要修改全局变量,您应该将其作为一
个输出参数,或返回其一份全局变量的拷贝。
• 变量的声明和初始化
一定请在最小的,包含该局部变量的作用域块内声明它。一般,如果语言允许,就仅在使用前声
明它们,否则就在作用域块的顶端声明。
一定请在声明变量时初始化它们。
一定请在语言允许的情况下,将局部变量的声明和初始化或赋值置于同一行代码内。这减少了代
码的垂直空间,确保了变量不会处在未初始化的状态。
// C++ sample:
HANDLE hToken = NULL;
PSID pIntegritySid = NULL;
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi = { 0 };
// C# sample:
string name = myObject.Name;
int val = time.Hours;
' VB.NET sample:
Dim name As String = myObject.Name
Dim val As Integer = time.Hours
一定不要 在同一行中声明多个变量。推荐每行只包含一句声明,这样有利于添加注释,也减少
歧义。例如'#((示例,
B!>
CodeExample *pFirst = NULL; // Pointer of the first element.
CodeExample *pSecond = NULL; // Pointer of the second element.
+!>
CodeExample *pFirst, *pSecond;
后一个代码示例经常被误写为>
CodeExample *pFirst, pSecond;
这种误写实际上等同于>
CodeExample *pFirst;
CodeExample pSecond;
• 函数的声明和调用
函数或方法的名称,返回值,参数列表可以有多种形式。原则上应该都将这些置于同一行代码内。
如果带有过多参数不能置于一行代码,可以进行换行:多个参数一行或者一个参数一行。将返回