C/C++程序设计注意事项 (二)

29. vc编译器对c函数默认的调用方式是_cdecl方式,函数参数按照从右向左的顺序入栈,被调函数出栈即可顺序使用参数。函数调用者负责清除栈中的参数。此方式支持了c标准中的可变参数函数调用。

 30. C#的完全基于.net framework (公共语言运行时CLR)的托管代码,其对象内存资源由框架负责管理。使用.net framework托管的代码编译生成中间语言,启动后由框架处理形成机器码,程序的整个声明周期交由框架负责而不是操作系统。这与c++写的非托管代码由操作系统(准确说是c运行时、c++标准库)负责调度是不同的。非托管代码需要手动释放内存资源,而托管是无需也不能干预的。

 31. .net framework中80%的托管资源是无需释放的,另外的非托管资源是需要手动释放的(如文件,窗口或网络连接Brush、Pen、Socket、Image)。vs中可于托管代码中使用非托管代码的,如[DllImport("Kernel32")]形式的P-INVOKE平台调用技术即可引入。

 32. 应用程序不能直接操作硬件设备,需要借助硬件驱动程序的桥接作用。如usb设备操作过程:应用程序-->win32 api-->usb设备驱动程序-->usb总线驱动程序-->主控制器驱动程序-->主控制器-->外围设备。

 33. extern "C"告诉编译器其所修饰的函数或变量是按照c语言方式编译连接的,c++编译后会导致名字不同从而找不到c函数故用了c连接交换符号,同时extern强调了函数或变量作用范围的全局性(多模块使用,一次声明只声明不分配,一次定义,多处使用,拒绝static)。

 34. Com组件实现了二进制级的代码复用与共享。

 35. 模板函数实例化在编译程序处理函数调用时自动完成;模板类实例化必须程序中显式指定。

 36. 显示调用(运行时动态链接)DLL中的函数时明文LoadLibrary("*.dll");GetProcAddress();需要*.dll位于当前目录或系统目录;隐式调用(载入时动态连接)如使用本地函数,使用编译器命令#pragma comment(lib,"*.lib"),*.lib位于工程目录中,*.dll位于可执行文件当前目录。

37. 析构函数尽量写成虚函数,这样便于继承后基类指针对子类对象的多态性表现。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sshhbb/archive/2011/01/27/6166194.aspx

posted @ 2011-04-15 16:32  山河  阅读(157)  评论(0编辑  收藏  举报