
C/C++及VC++
bird67
学会做人,学会健体,学会求知。字字金玉,诲我不倦!
展开
-
随机数的产生
<br />本文摘自:http://hi.baidu.com/%C8%ED%BC%FE%B8%D6%C7%D9%CA%A6/blog/item/5ab7f5f5b8d68b2dbc3109ab.html<br /> <br /> <br /> <br />rand(产生随机数) <br />相关函数 <br />srand <br /><br />表头文件 <br />#include<stdlib.h> <br /><br />定义函数 <br />int rand(void) <br /><br />函转载 2011-05-10 21:21:00 · 824 阅读 · 0 评论 -
关于复制构造函数
也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生。对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什么用,其实复制构造函数能解决一些我们常常会忽略的问题。 为了说明复制构造函数作用,我先说说我们在编程时会遇到的一些问题。对于C++中的函数,我们应该很熟悉了,因为平常经常使用;对于原创 2009-10-22 10:07:00 · 602 阅读 · 0 评论 -
字符串和字符数组的区别
1.sizeof(s),得出的长度不同。对于字符串得到的是指针类型的长度(为4)。对于字符数组得到的是字符数组的长度。2。char* s=”hello”;s[0]=a;//wrong!运行时显示为“段错误”。字符数组是可以修改的。3。作为返回值时不同。char* test(){char ch[5]={h,i};//gcc 会警告:返回局部变量。ret转载 2009-10-21 17:01:00 · 2643 阅读 · 0 评论 -
c语言中volatile关键字
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改。用volatile关键字声明的变量i每一次被访问时,执行部件都会从i相应的内存单元中取出i的值。没有用volatile关键字声明的变量i在被访问的时候可能直接从cpu的寄存器中取值(因为之前i被访问过,也就是说之前就从内存中取出i的值保存到某个寄存器中),之所以直接从寄存器中取值,而不去内转载 2009-10-13 09:21:00 · 649 阅读 · 0 评论 -
int型长度
Ø 基本数据类型C语言中只有4中基本数据类型——整型、浮点型、指针和聚合类型(如数组和结构等);所有其他类型都是从这4种基本类型的某种变化或组合派生而来。一、整型家族整型家族包括char、short int、int和long int,并且都分为signed和unsigned型。int型字长问题:long int型至少应该和int型一样长,而int原创 2009-10-14 15:36:00 · 3232 阅读 · 0 评论 -
c语言中volatile关键字
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改。用volatile关键字声明的变量i每一次被访问时,执行部件都会从i相应的内存单元中取出i的值。没有用volatile关键字声明的变量i在被访问的时候可能直接从cpu的寄存器中取值(因为之前i被访问过,也就是说之前就从内存中取出i的值保存到某个寄存器中),之所以直接从寄存器中取值,而不去内转载 2009-10-13 09:08:00 · 628 阅读 · 0 评论 -
define专题[转]
我们在写程序的时候总是需要一些如下的代码 int* p =(int *)malloc(sizeof(int)*100) for(i=0;i { ................ } 好,这个代码能正常的运行,但是有一天,突然觉得100实在是有点少,我打算申请1000个int,改成如下的代码转载 2009-03-24 09:04:00 · 654 阅读 · 0 评论 -
DLL中调用约定和名称修饰
调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议。这种协议规定了该语言的函数中的参数传送方式、参数是否可变和由谁来处理堆栈等问题。不同的语言定义了不同的调用约定。 在C++中,为了允许操作符重载和函数重载,C++编译器往往按照某种规则改写每一个入口点的符号名,以便允许同一个名字(具有不同的参数类型或者是不同的作用域)有多个用法,而不会打破转载 2009-03-24 08:55:00 · 1154 阅读 · 0 评论 -
【转】DLL编程之DEF文件
模块定义 (.def) 文件 模块定义 (.def) 文件为链接器提供有关被链接程序的导出、属性及其他方面的信息。生成 DLL 时,.def 文件最有用。由于存在可代替模块定义语句使用的链接器选项,通常不需要 .def 文件。也可以将__declspec(dllexport) 用作指定导出函数的手段。原创 2009-03-12 20:00:00 · 1900 阅读 · 0 评论 -
如何优化C语言代码
1、选择合适的算法和数据结构应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。.选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密码的转载 2008-11-28 12:44:00 · 542 阅读 · 0 评论 -
函数搜集
//将正数字符串转化为相应的正数float GetNum(const char *nptr){ int c; /* current char */ long inttotal; /* current total */ float fractotal; inttotal = 0; /* skip whitespace */ while ( issp原创 2008-11-13 20:37:00 · 568 阅读 · 0 评论 -
如何调试VC++6.0中Release版本的APPlication
在VC++6.0开发环境中,应用程序为Debug时,使用快捷键调试应用程序,我想用过VC的人应该都没有问题,但是如果应用程序为Release的版本时,我们又应该怎么调试呢?其实很简单,只是更改下设置就好了,呵呵VC++ 6.0 英文版设置:1)、Project setting->c/c++ General页 Optimizations中选择Disable(debug) Debug转载 2009-01-04 19:02:00 · 1434 阅读 · 0 评论 -
VC下关于debug和release的不同的讨论
在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当头一棒啊,可是疼归疼,问题总要解决,下面将讲述一下我的几点经验,看看是不是其中之一:1. 变量。大家都知道,debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc(注1),而release的赋值近转载 2009-01-04 18:49:00 · 794 阅读 · 0 评论 -
C/C++语言运算符优先级 详细列表
C语言运算符优先级 详细列表: 优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .成原创 2009-10-23 15:14:00 · 1305 阅读 · 0 评论 -
关于C++的 explicit关键字
简而言之:explicit修饰的构造函数不能担任转换函数这个 《ANSI/ISO C++ Professional Programmers Handbook 》是这样说的explicit ConstructorsA constructor that takes a single argument is, by default, an implicit conversion operator, w转载 2009-10-25 22:54:00 · 729 阅读 · 0 评论 -
c/c++的函数参数压栈顺序
c/c++的函数参数压栈顺序. 为了这句话丢了很多次人.无所谓了,反正咱脸皮厚. 总结一下: 编译出来的c/c++程序的参数压栈顺序只和编译器相关! 下面列举了一些常见的编译器的调用约定VC6: 调用约定 堆栈清除 参数传递 __cdecl 调用者 从右到左,通过堆栈转载 2009-11-05 20:36:00 · 5510 阅读 · 0 评论 -
智能指针(auto_ptr 和 shared_ptr)
/* 以下内容摘自http://zhoumf1214.blog.163.com/blog/static/524194020104203466852/ */ STL中的auto_ptr指针是为了解决内存泄漏问题而设计的。它严格限制了指针拥有对指向对象的所有权。auto_ptr指针和普通指针的差别在于对指向对象所有权的处理不同。auto_ptr指针是“传递”所有权,而普通指针是“共享”所有权。看下面例子:std::auto_ptr p1(new int(24));std::auto_ptr p2;int *转载 2010-09-15 20:57:00 · 1918 阅读 · 1 评论 -
c++智能指针
本文章摘自:http://blog.sina.com.cn/s/blog_4400494d0100dpme.html zero 坐在餐桌前,机械的重复“夹菜 -> 咀嚼 -> 吞咽”的动作序列,脸上用无形的大字写着:我心不在焉。在他的对面坐着 Solmyr ,慢条斯理的吃着他那份午餐,维持着他一贯很有修养的形象 ——— 或者按照 zero 这些熟悉他本质的人的说法:假象。“怎么了转载 2010-04-27 10:39:00 · 561 阅读 · 0 评论 -
析构函数中抛出的异常(Effective C++第八条:防止异常离开析构函数)
本文章摘自:http://blog.sina.com.cn/s/blog_4400494d0100ebi0.html (题目改了一下) 前两篇文章讨论了对象在构造过程中(构造函数)和运行过程中(成员函数)出现异常时的处理情况,本文将讨论最后一种情况,当异常发生在对象的析构销毁过程中时,又会有什么不同呢?主人公阿愚在此可以非常有把握地告诉大家,这将会有大大的不同,而且处理不善还将会毫不转载 2010-04-27 10:15:00 · 871 阅读 · 0 评论 -
C++异常机制的实现方式和开销分析
本文章转自:http://www.cublog.cn/u1/51538/showart_439371.html 在我几年前开始写《C++编码规范与指导》一文时,就已经规划着要加入这样一片讨论 C++ 异常机制的文章了。没想到几年以后才又有机会把这个尾巴补完 :-)。还是那句开场白:“在恰当的场合使用恰当的特性” 对每个 C++ 程序员来说都是一个基本标准。想要做到这点,就必须要了转载 2010-04-26 11:40:00 · 1222 阅读 · 0 评论 -
C++成员初始化列表
本文摘自:http://blog.chinaunix.net/u2/75321/showart_1161692.html C++为类中提供类成员的初始化列表类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员2.进入构造函数后在构造函数中执行一般计算使用初始化列表有两个原因:1.必须这样做: 《C++ Primer》中提到在以下原创 2010-04-27 15:09:00 · 705 阅读 · 1 评论 -
对象生死劫 - 构造函数和析构函数的异常
本文章转自:http://blog.sina.com.cn/s/blog_4400494d0100ebi5.html 构造函数和析构函数分别管理对象的建立和释放,负责对象的诞生和死亡的过程。当一个对象诞生时,构造函数负责创建并初始化对象的内部环境,包括分配内存、创建内部对象和打开相关的外部资源,等等。而当对象死亡时,析构函数负责关闭资源、释放内部的对象和已分配的内存。 在对象生转载 2010-04-27 10:13:00 · 772 阅读 · 0 评论 -
多态是如何实现的
1. 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。3. 多态性是一个接口多种实现,是面向对象的核心。分为类的多态性和函数的多态性。4. 多态用虚函数来实现,结合动态绑定。5. 纯虚函数是虚函数再加上= 0。6. 抽象类是指包括至少一个纯虚函数的转载 2010-04-26 10:38:00 · 11381 阅读 · 1 评论 -
C++ 进阶书单
C++ 进阶书单C++/OPP/OOD系列:层级一:语法/语意(C++)[Lippman2000] Essential C++Essential C++,by Stanley B. Lippman Addison Wesley Longman 2000,276 pagesEssential C++ 中文版 ,侯俊杰 译,282页 [Gregory95] C++:The Core Lang转载 2010-04-16 23:45:00 · 1458 阅读 · 0 评论 -
在VS中debug时,将未初始化变量都赋值为CC的顿悟
一直以来,我都不是太理解这种方式,在 C++函数调用原理理解中,我仅仅是简单的认为,那么做,可能是因为CC平时用的少,而且好看:)所以初始化这样一个不怎么常用的变量,可以让人很快发现。。。。事实上,的确有这样的效果,当Debug时,我看一个变量为CC时的确第一时间就能反应过来,我又犯了一个不可饶恕的低级错误,又忘了初始化了,这点在变量为指针类型的时候更加严重。 但是,在学习过反汇编这么久后,今转载 2010-02-25 10:58:00 · 1845 阅读 · 1 评论 -
C++虚函数和多态学习笔记
1、什么是虚函数和多态虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用调用此类函数时,对其执行晚绑定,即通过指针(或引用)指向的类的类型信息来决定该函数是哪个类的。通常此类指针或引用都声明为基类的,它可以指向基类或派生类的对象。多态指同一个方法根据其所属的不同对象可以有不同的行为(根据自己理解,不知这么说是否严谨)。举个例子说明虚函数、多态、早绑定和晚绑定:转载 2009-10-30 08:06:00 · 583 阅读 · 0 评论 -
C++中成员初始化列表的使用
C++在类的构造函数中,可以两种方式初始化成员数据(data member)。1,在构造函数的实现中,初始类的成员数据。诸如:class point{private: int x,y;public: point(int m=0,int n=0) { x=m; y=n; } int GetX() { return x; } int GetY() { return y; }}转载 2009-11-05 20:12:00 · 753 阅读 · 0 评论 -
函数调用约定和堆栈
1 什么是堆栈编译器一般使用堆栈实现函数调用。堆栈是存储器的一个区域,嵌入式环境有时需要程序员自己定义一个数组作为堆栈。Windows为每个线程自动维护一个堆栈,堆栈的大小可以设置。编译器使用堆栈来堆放每个函数的参数、局部变量等信息。函数调用经常是嵌套的,在同一时刻,堆栈中会有多个函数的信息,每个函数占用一个连续的区域。一个函数占用的区域被称作帧(frame)。 编译器转载 2009-11-05 22:28:00 · 1090 阅读 · 0 评论 -
解析C语言中的sizeof
一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如sizeof(i转载 2008-11-09 09:30:00 · 563 阅读 · 0 评论 -
C语言-预处理命令
我们可以在C源程序中插入传给编译程序的各中指令,这些指令被称为预处理器指令,它们扩充了程序设计的环境。现把常用的预处理命令总结如下:1. 预处理程序按照ANSI标准的定义,预处理程序应该处理以下指令:#if #ifdef #ifndef #else #elif#endif#define#undef#line#error#pragma#include显然,上述所有的12个预处理指令都以符号转载 2008-11-08 20:04:00 · 1017 阅读 · 0 评论 -
lib文件格式
如果你试着做一个应用程序的连接器(Linker),就会发现,仅仅有目标文件是不够的。我们在连接程序时,不仅仅要用到目标文件,库文件也是必不可少的。 库文件是怎么样的结构呢? 其实,库文件的结构也很简单。它就是“一堆”目标文件的集合。把目标文件做成库以后,我们在使用目标文件中所实现的功能时,连接程序会自动在库文件里查找相应的目标文件,并使用它。这大大减少了我们对目标文件的管理工作,减轻了原创 2008-09-12 21:21:00 · 2473 阅读 · 0 评论 -
C++中extern "C" 的用意
时常在cpp的代码之中看到这样的代码: #ifdef __cplusplu* **tern "C" { #endif//一段代码#ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入ex转载 2008-09-12 20:36:00 · 693 阅读 · 0 评论 -
什么是lib文件,lib和dll的关系如何
(1)lib是编译时需要的,dll是运行时需要的。 如果要完成源代码的编译,有lib就够了。 如果也使动态连接的程序运行起来,有dll就够了。 在开发和调试阶段,当然最好都有。 (2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有l原创 2008-09-12 11:11:00 · 1259 阅读 · 0 评论 -
在VC中怎样实现软件的注册机制
现在网上下载的软件大部分都需要注册后才能使用其全部的功能,也就是说当前大部分软件都是建立了注册机制的,对于一个刚进入软件行业的程序员来说一定非常想了解其中的注册机制是怎样实现的。其实用VC开发软件,是可以很方便地加入注册机制的。 http://www.kpwang.com要实现软件注册功能,首先需要知道实现注册机制要涉及到的几个问题:1、如何加入注册检测,判断软件是否注册;2、如何生成注册码,如何原创 2008-09-07 22:53:00 · 1031 阅读 · 1 评论 -
(转)如何使应用程序只运行一个实例
要使应用程序只运行一个实例,一个简单的方法是在应用程序类中使用互斥量,这可以用VC下的GUIDGEN.EXE程序产生.GUIDGEN.EXE位于VC安装目录CommonTools目录下 实例 1: 新建一基于对话框的工程ex1,采用默认设置 2: 用GUIDGEN.EXE产生一个全局标志,#define one "产生的全局标志" 本例中产生的语句如下:#define o转载 2008-09-07 22:09:00 · 637 阅读 · 0 评论 -
如何实现API钩子
一、序言对大多数的Windows开发者来说,如何在Win32系统中对API函数的调用进行拦截一直是项极富挑战性的课题,因为这将是对你所掌握的计算机知识较为全面的考验,尤其是一些在如今使用RAD进行软件开发时并不常用的知识,这包括了操作系统原理、汇编语言甚至是关于机器指令代码的(听上去真是有点恐怖,不过这是事实)。 当前广泛使用的Windows操作系统中,像Win 9x和Win NT/2转载 2008-09-07 21:53:00 · 1512 阅读 · 0 评论 -
大家在使用VC的时候一定要安装的一个工具VisualAssist及其最新破解版下载
我觉得大家使用VC的人一定都会用到这个这个吧,实在是太智能了,我从它的6.0版本就开始用,一直用到现在,这么多年了,我从来没有离开过她... 对它的广告我就不多说了,就一句话概括,它是一个可以帮你大幅度提高输入代码速度的一个工具,虽然现在.Net里面已经自带了这种类似的智能工具,但是VC里面还是没有,虽然咱们还是得靠她,我现在离了她都不大会输入代码了呵呵 因为本人是转载 2008-09-03 20:28:00 · 2529 阅读 · 0 评论 -
浅谈C中的malloc和free
原帖及讨论:http://www.bc-cn.net/bbs/dispbbs.asp?BoardID=5&ID=82212 在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识转载 2008-08-19 16:43:00 · 671 阅读 · 0 评论 -
c/c++ 深入探讨数组内存模型
在csdn上看到很多很多初学网友的关于指针,数组的疑问,我知道,对于一个好学的人来书,怎么做不重要,关键是为什么要这样做,只有深入到这一步了,才敢说‘阿,我懂了’,于是,以后碰到类似的问题,就可以从我们知道的原理出发,悠然自得而又满怀信心地推导出正确的结果。然而,好学的人往往注定了困惑于一时的不解,并且,付出过多的时间去试图解决这种迷惑不解,其中的辛苦是可想而知的,因为,我就是这样走过来的。所以,转载 2008-02-19 12:35:00 · 861 阅读 · 0 评论 -
一篇关于sizeof的精辟文章
关键字:sizeof,字节对齐,多继承,虚拟继承,成员函数指针 前向声明: sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“ 辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。 但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文有的地方并不 适合初学者,甚至都没有必要大作文章。但如果你想“知其然,更知其所以然”的话, 那么这篇文转载 2008-02-19 12:32:00 · 804 阅读 · 0 评论