1. 整形变量定义不许使用long、long long等其长度与系统有关的变量,应使用int64、int32等等。
2. 字符数组定义原则上使用ACE_TCHAR,不使用char,也不使用TCHAR。
3. 字符串操作函数只能使用ACE_OS域下的函数,例如,不能直接使用strncpy,应使用ACE_OS::strncpy(…)等等。ACE_OS下没有的函数,不许使用。如atoi,strlwr,strupr等函数只在Windows系统下又,在Linux下没有,在ACE_OS命名空间中也没有,不许使用。
4. 原则上不能直接调用操作系统的API,如Sleep、CreateThread、CreateDirectory等等。应该使用ACE_OS::sleep(…)。
5. 文件操作应使用ACE_FILE,直接用fopen在移植到64位时可能存在问题。
6. 禁止直接使用printf打印输出信息,输出信息到屏幕应使用ACE_DEBUG,ACE_ERROR等等方式,使用ACE_DEBUG时,应严格区分信息的等级,如错误等级、通知等级等等。具体写法请遵照日志输出规范文档。
7. 使用断言优先使用ACE_ASSERT。
8. 禁止使用WindowsAPI GetPrivateProfilexxx等操作ini配置文件,默认通过ACE库中的方法操作ini文件。
9. 所有导出函数都应用extern “C”进行声明。
10. 编写的dll中原则上,不出现DLLMain函数。
11. 文件路径操作的分隔符默认为”/”,原则上不使用”\\”,目前Windows对两种斜杠都识别,但是Linux文件路径只识别”/”。
12. 包含文件#include后的文件名必须与真实的文件名大小写完全一致。
13. 在void*指针和其他类型强制转换时,应该增加dynamic_cast,static_cast,reinterpret_cast等标记。
14. 不应假定指针类型变量的长度为4字节,在32位系统,其长度为4字节,但在64位系统时,其长度为8字节。void指针类型默认使用intptr_t,或者uintptr_t
15. 所有头文件中都需要#ifdef #else #endif 防止重复包含。
16. 所有注释默认都写在代码行的上面,而不是写在代码行的后面。
17. 所有Hash表默认用Hash.h实现实现或者ACE库中的Hash表,不再引入外面其他类别的Hash表。
18. 所有链表默认用SzlList.h模板实现或者ACE库中的链表,不再引入外面其他类别的链表。
19. 所有线程的实现,默认都使用ACE_Task实现。
20. DLL动态加载用ACE_DLL相关类完成。
21. 进程创建和管道通信用ACE_PROCESS相关类完成。
22. for循环的控制变量应该在for循环前面定义,禁止for(intI = 0; i<xx; i++)这种类型的代码。
23. 提交的文件必须在Windows、Linux都能编译通过(必要时32位、64位都要能通过),除MFC界面程序外,提交程序时,应一并提交Linux下的Makefile文件。
24. 除了Windows MFC界面程序外,禁止使用MFC类库,包括CString、LPCTSTR等等Windows特有的数据类型。
25. 内部通信SOCKET方式,默认采用STP,不再编写单独的Socket程序。
26. Release、Debug两个版本的工程设置是否齐全,输出到代码框架的bin目录下
27. Debug的输出默认要带'd'
28. Release版本引用的Lib不能出现Debug版本的,Debug版本引用的Lib不能出现Release版本的
运行时库Debug选择Debug MultiThreaded DLL,Release版本选择Release MultiThreaded DLL