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

7 篇文章 0 订阅

 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. 析构函数尽量写成虚函数,这样便于继承后基类指针对子类对象的多态性表现。

38. 使用系统时间做软件日志名称,同时注意文件的路径问题,若果使用相对路径默认会使用GetCurrentDirectory()获取进程当前路径,有的时候得到路劲可能是c:windows system32 目录下。可考虑使用GetModuleFileName(NULL,exepath,MAX_PATH)获取当前exe文件的绝对路径从而定位。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值