- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第 PAGE 41页
编程规范
内存分配后要调用memset
strncpy要比strcpy安全
有时最好调用memcpy
定义结构(不是结构指针)后,调用memset
Socket编程不要忘记检测返回错误检测
中断有可能会终止某些非原子操作函数read/write/send/recev
调试编译
gcc编译选项和DEFS
Gcc is a ansi copiler
-g
-w
-O0
Reduce compilation time and make debugging produce the expected results. This is the default.
-O1
-O2
-O3最高级别优化
-ansi
-fPIC
-shared
-D
define symbols either as identifiers (-Didentifer) or as values (-Dsymbol=value) in a similar fashion as the #define preprocessor command. For further information on general compiler options and the GNU compiler refer to Appendix .
-DSYSV
A lot of clients (even some which have explicit SVR4 support) require
-DSYSV when building under SVR4. This will not be set when using the
default x386.cf and site.def. A quick fix is to add something like the
following to the clients Imakefile:
#if SystemV4
DEFINES = -DSYSV OTHER_CLIENT_DEPENDENT_DEFINES
#endif
The best solution is to modify the code so it compiles correctly
without -DSYSV.
-march = pentium4:4.1.0版本以上支持此选项
VC编译选项(VC8 (2005) cl )
/nologo 编译时不显示编译选项
/Od 无优化
/W3 告警级别为3
/MDd DLL支持(多线程)调试
/Yu “stdafx.h” 使用预编译头
/D “WIN32”
/D “_DEBUG” 编译的对象加入调试信息,类似于gcc编译选项 –g
/Fo 调试相关
/Fp 浮点数相关
/Fd 调试信息相关
/Gd 调用约定为_cdecl
/Gm 最小编译
/Tp 编译成c++代码
/ZI 调试时可以编辑并运行
/Wp64 检测64位可移植性问题
/EHsc 启用C++异常处理
/RTC1 基本运行时检查(RTC1==RTCsu包括RTCs(堆栈帧检查) 和RTCu(未初始化变量检查) )
/Za /Ze
Visual C++ 编译器提供许多在 ANSI C 或 ANSI C++ 标准中指定的那些功能以外的功能。这些功能统称为 C 和 C++ 的 Microsoft 扩展。这些扩展在指定 /Ze 选项时可用,而在指定 /Za 选项时不可用。
如果打算将程序移植到其他环境,请禁用语言扩展。编译器将扩展关键字视为简单标识符,禁用其他 Microsoft 扩展,并且自动定义 C 程序的 __STDC__ 预定义宏。
/Zc ??
/Zc:wchar_t
/c ??
调用约定
_cdecl 是C Declaration的缩写,表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数无需要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。
_stdcall 是Standard Call的缩写,是C++的标准调用方式:所有参数从右到左依次入栈,如果是调用类成员的话,最后一个入栈的是this指针。这些堆栈中的参数由被调用的 函数在返回后清除,使用的指令是 retn X,X表示参数占用的字节数,CPU在ret之后自动弹出X个字节的堆栈空间。称为自动清栈。函数在编译的时候就必须确定参数个数,并且调用者必须严格的 控制参数的生成,不能多,不能少,否则返回后会出错。
PASCAL 是Pascal语言的函数调用方式,也可以在
文档评论(0)