VS2005 没有找到MSVCR80D.dll的完美解决方案

方法1. “工程属性->配置属性->清单工具->常规->FAT32解决办法”,选“是”;

方法2. 找到工程Debug目录下的.rec文件,删掉(或删掉整个Debug目录)重新编译;

方法3. http://www.cnblogs.com/qianinsun/archive/2006/12/01/579182.html

 字节对齐    #program pack(x)    //x=1,2,4,8,16...默认为8

每当一个结构的成员变量要定位时,取该成员变量的长度与x中间的最小值作为标准,该成员变量的偏移量(offset)必须能够被该值整除。当所有的成员都定位完成后,再次取该结构体中最宽成员的长度与x中间的最小值作为标准,整个结构体的大小必须能够被该值整除。

 .NET环境编程tip

任何.NET环境下编写的程序都需要安装.NET框架才能运行(注意默认情况下C++语言编写的程序不需要.NET框架的CLR即运行,通过制定一个新的开关,C++编译器也能够产生出需要CLR才能执行的托管模块),我们可以通过再%windir%/system32目录下查找MSCorEE.dll文件来判断该机器是否安装了.NET框架。如果存在则证明已安装。如果想确定安装了哪些版本的.NET框架,可以查看如下注册表键下的子键:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/policy

 C VS .NET

C语言运行时堆分配内存基于链表,.NET CLR托管堆分配则基于连续的内存块,故.NET分配对象要比C快得多;

.NET在垃圾回收后要用到memcpy函数压缩托管堆,所以会给应用程序带来不小的性能损伤,其性能比C运行时的堆的性能低。

 指针的强制类型转换

在指针的强制类型转换:ptr1=(TYPE*)ptr2中,如果sizeof(ptr2的类型)大于sizeof(ptr1的类型),那么在使用指针ptr1来访问ptr2所指向的存储区时是安全的。如果sizeof(ptr2的类型)小于sizeof(ptr1的类型),那么在使用指针ptr1 来访问ptr2所指向的存储区时是不安全的。

 Win32平台下的微软C编译器(cl.exe for 80x86)在默认情况下采用如下的对齐规则

任何基本数据类型T的对齐模数就是T的大小,即sizeof(T)。比如对于double类型(8字节),就要求该类型数据的地址总是8的倍数,而char类型数据(1字节)则可以从任何一个地址开始。Linux下的GCC奉行的是另外一套规则(在资料中查得,并未验证,如错误请指正):任何2字节大小(包括单字节吗?)的数据类型(比如short)的对齐模数是2,而其它所有超过2字节的数据类型(比如long,double)都以4为对齐模数。

 "精确制导"

通过关闭一个局部作用域(比如一对花括号"{}"),你可以精确控制变量的析构函数何时调用。

 抽象类

抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类的构造函数说明为保护的访问控制权限。

抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类没有重新定义纯虚函数,而派生类只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体类了。

 类非内建类型成员的初始化

类非内建类型(如string类型)成员的初始化采用(1)形式比采用形式(2)可以获得大概30%的效率提升;

形式(1):

Employee::Employee(const String& nm) : name(nm) { }

形式(2):

Employee::Emplogyee(const String& nm) { name = nm; }

形式(2)会对name成员进行两次关于string的操作(一次初始化一次赋值)。

 ...

当两个操作数都是操作的输入,并且没有一个会受到操作的影响,那么我们最好将改操作符定义为一个非成员函数。这样可以确保在有隐式转换的条件下,这两个操作数都可以以同样的方式来进行操作。

 ...

将一个未命名的临时对象作为一个非常量指针传递给以常量作为参数的函数是非法的。

 ...

如果基类中的析构函数不是虚拟的,那么通过一个指针来进行的删除动作将不能调用到正确的那个派生类中的析构函数。

 宏字符#

#是一个字符串化操作符,将宏的参数转换为字符串常量。

 Visual Studio快捷键    Crtl+J 输入补全

Crtl+K, Crtl+I 呼出相关信息提示

Crtl+K, Crtl+P 呼出参数信息

Shift+Alt+o 查找文件(AssistX?)

Crtl+I 快速查找

Crtl+Shift+V 呼出最近20条剪贴板记录

Crtl+W 选定光标所处单词

Ctrl+M, Ctrl+M 折叠代码

Crlt+M, Ctrl+L 折叠该文件所有代码

Crtl+L 剪切行

Ctrl+Shift+L 删除行

Alt+G 跳至函数定义/上一个和下一个光标位置切换

 VC从硬盘加载一张位图的方法:    HBITMAP hBmp;

CBitmap Bitmap;

hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), "./res/bv.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

Bitmap.DeleteObject();

if(!Bitmap.Attach(hBmp))

{

AfxMessageBox("Error to attach a Bitmap");

}

 ASCII特殊字符

数值 8、9、10 和 13 可以分别转换为退格符、制表符、换行符和回车符。这些字符都没有图形表示,但是对于不同的应用程序,这些字符可能会影响文本的显示效果。

 可编程内存类型

可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。

静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。

栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。 但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。

对于堆区、栈区和静态存储区它们之间最大的不同在于,栈的生命周期很短暂。但是堆区和静态存储区的生命周期相当于与程序的生命同时存在(如果您不在程序运行中间将堆内存delete的话),我们将这种变量或数据成为全局变量或数据。

 VS中使用预编译文件    1. 在工程级别设置预编译文件的名称,并且设置预编译头文件的名称(如stdafx.h),并设置工程Yu(“使用”)标记;

2. 在文件级别(如stdafx.cpp)设置由该文件生成预编译头,设置该文件Yc(“生成”)标记即可;

3. 要生成预编译头xxx.pch只要选择上述文件(stdafx.cpp),单独编译就可以了。

 using namespace作用域    哪个文件写了using namespace std,那个文件就引入了这个名字空间,跟其他文件没关系。

 安装vs2003常见问题    1. 安装时读写注册表过不去

在注册表中删除HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/pendingfilerenameoperations即可;

2. 安装后出现读取Accessibility错误

复制:C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Accessibility.dll到:C:/Program Files/Microsoft Visual Studio .NET 2003/Common7/IDE/解决问题;

或者重新安装 Microsoft.NET Framework;

 fopen二进制("b")和文本方式("t")的区别    二进制方式很简单,读文件时,会原封不动的读出文件的全部內容,写的時候,也是把內存缓冲区的內容原封不动的写到文件中。

文本方式就不一样了,在写文件时,会将换行符号CRLF(0x0D 0x0A)全部转换成单个的0x0A,并且当遇到结束符CTRLZ(0x1A)时,就认为文件已经结束。相应的,写文件时,会将所有的0x0A换成0x0D0x0A。

VC6编辑直接采用Linux换行符,Tips: VC++篇相关推荐

  1. Linux换行符和Windows换行符的区别与转换

    不同系统文本文件的行尾换行符不同: Windows为一个回车'\r'(CR或^M)和一个换行'\n'(NL或LF)(括号内是其它显示方法) Linux为一个换行'\n' Mac为一个回车'\r' 查看 ...

  2. [shell] widows与Linux 换行符不同 导致字符串拼接错误

    场景: 在shell中读取配置文件,并将每一行增量赋值给变量,即进行字符串的拼接.之后对变量进行操作 问题描述 编写好脚本后,执行脚本,只能得到最后一行配置信息 config.cfg config1 ...

  3. linux 换行符_「linux」libevent demo详细分析(对比epoll)

    libevent默认情况下是单线程,每个线程有且仅有一个event_base,对应一个struct event_base结构体,以及赋予其上的事件管理器,用来安排托管给它的一系列的事件. 当有一个事件 ...

  4. linux 换行符_一个linux帮你做高效数据统计

    wc(world count)是一个统计文件字词,字节,行数的命令,它可以帮我们非常方便的统计以上信息. 主要参数 常见参数如下: -c 统计字节数. -l 统计行数. -m 统计字符数.这个标志不能 ...

  5. linux换行符 r,\r \n 回车换行符详解

    \r \n 回车换行符详解 \r \n 回车换行符详解 \r \n 回车换行符详解1. \r \n 回车换行的含义1.1 \r 回车 1.2 \n 换行 2. \r \n 回车换行的历史2.1 \r ...

  6. word2016能识别linux换行符,word文章中的换行符如何批量替换为回车符

    word文件中有换行符很正常,但是想要将换行符全部替换为回车符,该怎么替换?以下是学习啦小编为您带来的关于word文章中的换行符批量替换为回车符,希望对您有所帮助. word文章中的换行符批量替换为回 ...

  7. Linux换行符与windows换行符

    记录这个问题,主要原因是Azkaban识别不了windows的换行符. Unix系统里,每行结尾只有"<换行>",即"\n":Windows系统里面 ...

  8. ue里替换linux换行符,UltraEdit替换回车换行怎么操作?替换回车换行方法讲解

    这篇文章为各位带来的内容是UltraEdit替换回车换行相关的,对此感兴趣的用户可以去下文看看UltraEdit替换回车换行的操作方法. UltraEdit替换回车换行的操作方法 首先打开一个原始文档 ...

  9. vba 读取linux换行符,【VBA研究】清除字符串中的回车换行符

    作者:iamlaosong 如题,实际应用中,客户输入的地址中含有回车换行,导致格式转换中出错,因此需要清除掉,方法有二: 1.替换,这个方法只能清除一个回车换行 '检测地址中是否有回车换行 addr ...

最新文章

  1. 从 PoS 进化 SPoS:无能耗共识机制
  2. 我的世界服务器菜单制作,小白腐竹福[服务器菜单制作]极其详细!看了就会
  3. 中国二氧化碳激光器行业现状研究与可行性分析报告2022-2028年版
  4. Puppet实战笔记
  5. shell之引号嵌套引号大全
  6. 《C++ Primer 4th》读书笔记 第7章-函数
  7. CDKEY制作:为什么会有CDKEY产生机这样的破解工具?
  8. overleaf换模板
  9. Winform开发框架的重要特性总结
  10. 乔布斯斯坦福大学演讲
  11. 网站推荐(3)——黑马Java学习路线
  12. 洛谷刷题笔记 奥运奖牌计数
  13. 机械工程信号处理(一):基本概念及应用
  14. 遇见未来的自己——2021篇
  15. 期货开户关于基本面量化
  16. Office 365身份认证--深度解析(一)
  17. [附源码]java毕业设计医药管理系统
  18. Simulink之功率二极管(整流二极管)
  19. arcsoft人脸识别sdk使用方法(android版本)
  20. 音频格式转换软件哪个好?这篇文章告诉你

热门文章

  1. 解决ssh登录慢,等待时间长的问题
  2. jsp引用带参数的js文件,例如 script src=a.js?ctxpath=${base
  3. Reachability
  4. php截取字符串,无乱码
  5. Ubuntu 下压缩软件的安装
  6. Windows7下通过VHD安装Windows8系统
  7. prototype中的$H函数的用法
  8. 你可能不知道Windows系统下有一个UNIX子系统
  9. 989. 数组形式的整数加法
  10. mysql _bin编码_mysql中utf8_bin、utf8_general_ci、utf8_general_cs编码区别