
C/C++
文章平均质量分 79
pizi0475
这个作者很懒,什么都没留下…
展开
-
extern C的用法
链接指示符extern C如果程序员希望调用其他程序设计语言尤其是C 写的函数那么调用函数时必须告诉编译器使用不同的要求例如当这样的函数被调用时函数名或参数排列的顺序可能不同无论是C++函数调用它还是用其他语言写的函数调用它程序员用链接指示符linkage directive 告诉编译器该函数是用其他的程序设计语言编写的链接指示符有两种形式既可以是单一语句single statement 形式也转载 2009-06-02 16:12:00 · 1970 阅读 · 2 评论 -
有符号 & 无符号!改变计算结果的陷阱!
有符号 & 无符号!改变计算结果的陷阱! 简单的代码,复杂的问题。环境:VC6SP5,Win2kProint b = 10; //已经赋值为有效数据const char * str = "1234567890ABCDEF"; //已经赋值为有效的字符串。int a = (b - strlen(str) ) / 2;经过了这样的计算,a的值究竟是多少?结果当然不是 (10-16)/转载 2009-06-02 16:14:00 · 1627 阅读 · 0 评论 -
内存管理----高质量C++
内存管理----高质量C++ 第7 章 内存管理欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言:640K ought to be enough for everybody— Bill Gates 1981程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细转载 2009-06-02 16:15:00 · 665 阅读 · 0 评论 -
[C++]String类的实现
//代码参考C++primer.//String类的实现,清翔兔 06,Jan.#includeusing namespace std; class String{ friend ostream& operatorpublic: String(const char* str=NULL); //赋值构造兼默认构造函数(char转载 2010-02-01 15:47:00 · 1254 阅读 · 0 评论 -
C++的auto_ptr
auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理。它的源代码:namespace std{ template class auto_ptr { private: T* ap; public: // constructor & destructor ----------------------------------- (1) explicit au转载 2010-02-01 15:48:00 · 1183 阅读 · 0 评论 -
C++连接Oracle
C++连接Oracle 在Visual C++下开发Oracle库接口主要有两种方法。一种方法是利用Visual C++提供的多种数据库访问技术,如开放数据库连接ODBC、数据存取对象DAO、对象连接和嵌入数据库OLE DB和ActiveX数据对象ADO等。另一种方法是在Visual C++中嵌入SQL语句,这就是所指的Pro*C/C++(本文简称PROC)。前一种方法由于有MF原创 2010-02-04 15:06:00 · 2158 阅读 · 0 评论 -
STL中string的源码解读
STL中string的源码解读 Ryan pengcutezero@163.comSunday, June 03, 2007 这是个人最近比较闲暇之余,对SGI STL中string分析,如果有任何理解错误,请和我联系,谢谢! 为什么要分析string呢?我们知道大多数的编译器实现的string都各不相同(即便是同一个编译厂商在不同的版本string的实现也不一样,例如转载 2010-02-04 14:49:00 · 7334 阅读 · 1 评论 -
高质量C++/C编程指南
高质量C++/C编程指南 文件状态[ ] 草稿文件[√] 正式文件[ ] 更改正式文件 文件标识: 当前版本: 1.0 作 者: 林锐 博士 完成日期: 2001年7月24日版 本 历 史版本/状态 作者 参与者 起止日期 备注V 0.9草稿文件 林锐 2001-7-1至2001-7-18 林锐起草V 1.0正式文件 林锐 2001-7-18至20原创 2010-02-04 15:04:00 · 2206 阅读 · 0 评论 -
了解CObject 和 CRuntimeClass
作者:林水怒 shuinu@163.net转载请保留作者署名 CObject和CRuntimeClass是MFC中两个非常重要的类/结构,绝大部分MFC类都是以CObject做为基类, CRuntimeClass结构同CObject密不可分,了解它们对于深入理解MFC具有重要意义。 一、CRuntimeClass结构要理解CObject,我们先来看一下CRuntimeClass这个在MFC中至转载 2010-02-04 15:10:00 · 1197 阅读 · 0 评论 -
如何在C++中集成Lua脚本
如何在C++中集成Lua脚本去年我作了一个Lua脚本的C++包装,有许多朋友感兴趣,并尝试使用,我感到受宠若惊。事实上,我作的包装,学习的目的比较强,它还是有许多缺陷的。为了让朋友们少走弯路,我推荐使用LuaPlus作为C++的包装。LuaPlus是Lua的C++增强,也就是说,LuaPlus本身就是在Lua的源码上进行增强得来的。用它与C++进行合作,是比较好的一个选择。LuaPlus目前版转载 2010-02-04 15:14:00 · 1431 阅读 · 0 评论 -
c++中的explicit关键字
c++中的explicit关键字c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class MyClass{public:MyClass( int num );转载 2010-02-04 15:17:00 · 1290 阅读 · 0 评论 -
关于头文件和源文件的分别
关于头文件和源文件的分别首先,我们可以将所有东西都放在一个.cpp文件内.然后编译器就将这个.cpp编译成.obj,obj是什么东西?就是编译单元了.一个程序,可以由一个编译单元组成,也可以有多个编译单元组成. 如果你不想让你的源代码变得很难阅读的话,就请使用多个编译单元吧.(一个函数不能放到两个编译单元里面,但两个以上就可以分别放在一个单元,也就是cpp里面)转载 2010-02-04 15:17:00 · 1526 阅读 · 0 评论 -
MFC消息传递顺序
1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用, 然后调用WindowProc()函数3.WindowProc() 该函数负责发送消息到OnWndMs转载 2010-02-04 14:39:00 · 2013 阅读 · 0 评论 -
vc中常用的方法
vc中常用的方法 一、打开CD-ROM mciSendString("Set cdAudio door open wait",NULL,0,NULL); 二、关闭CD_ROM mciSendString("Set cdAudio door closed wait",NULL,0,NULL); 三、关闭计算机 OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数转载 2010-02-04 15:01:00 · 1631 阅读 · 0 评论 -
c++编码规范101条
c++编码规范101条组织和策略问题第0条 不要拘泥于小节(又名:了解哪些东西不应该标准化)第1条 在高警告级别干净利落地进行编译第2条 使用自动构建系统第3条 使用版本控制系统第4条 在代码审查上投入设计风格第5条 一个实体应该只有一个紧凑的职责第6条 正确、简单和清晰第一第7条 编程中应知道何时和如何考虑可伸缩性第8条 不要进行不成熟的优化第9条 不要进行不成熟的劣化第10条 尽量减少转载 2010-02-04 15:02:00 · 1643 阅读 · 0 评论 -
C++对象内存布局
C++对象内存布局1.1 最简单的类写一小段简单代码:class CTest{public: int var_a; int var_b; int var_c; public: void fun1() { var_a = 10; } void fun2() {转载 2010-02-04 15:11:00 · 1344 阅读 · 0 评论 -
OIS鼠标在游戏窗口内外切换(non-exclusive input)
useful for non fullscreen mode, especially when debugging) 如果想鼠标在游戏窗口和其它应用程序间自动切换,或键盘在游戏之外使用,可在OIS中加入下面代码:// insert the following right before calling mInputSystem = OIS::InputManager::createInput转载 2010-02-21 15:01:00 · 2155 阅读 · 1 评论 -
C++函数调用方式(_stdcall, _pascal, _cdecl...)总结
__stdcall: _stdcall 调用约定相当于16位动态库中经常使用的PASCAL调用约定。在32位的VC++5.0中PASCAL调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal外,__fortran和__syscall也不被支持),取而代之的是__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前转载 2010-02-20 10:02:00 · 13986 阅读 · 130 评论 -
c++ 重载New操作符
一、重载规则I.可以重载的操作符+- */ %^& |~ !=>*=/= %=^=&=|=>>>===!=>= ||++-- ->*,->[]() operator new operator new[]operator delete operator delete []II.不能重载的操作符::..*? :sizeoftypeidnewdeletestatic_castdynami转载 2010-02-20 09:41:00 · 4140 阅读 · 1 评论 -
OGRE疑问解答
1. 缓冲(buffered)输入方式和非缓冲(unbuffered)输入有什么区别? unbuffered:不断的响应按键信息,直到按键放开。例如,按下上下左右,使得角色持续移动。 一般来讲适合于3D场景漫游过程,当在每帧渲染之前,系统捕获输入设备状态,并根据这些状态对场景中的物体和摄象机进行控制。 buffered:在一个按键放开之前,只处理一次输入信转载 2010-02-23 15:40:00 · 1474 阅读 · 0 评论 -
OGRE资源相关分析
ResourceResource的类继承体系如下: Resource代表着一类可以被载入的资源,比如Mesh,Texture等。每个资源有其唯一的Name,根据Name可以定位到某个资源,这样也确保了资源只能被载入一次。并且Resource必须在一段时间不使用的时候要被删除。要实现为Resource子类有以下要求:1. 构造函数和Resorce有转载 2010-02-23 15:40:00 · 2218 阅读 · 0 评论 -
c++陷阱与误区
1. static有什么用途?(请至少说明两种)答 、1.限制变量的作用域。2.设置变量的存储域。2. 引用与指针有什么区别?答 、1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。3. 描述实时系统的基本特性答 、在特定时间内完成特定的任务,实时性与可靠性。4. 全局变量和局部变量在内存中是否有区转载 2010-02-23 15:53:00 · 1161 阅读 · 0 评论 -
明晰C++内存分配的五种方法的区别
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回转载 2010-02-23 15:55:00 · 1104 阅读 · 0 评论 -
C++中的钩子技术
你创建一个钩子时,WINDOWS系统会创建一个数据结构,该结构包含了您创建的钩子的信息,安装钩子则是把该结构体插入到系统钩子列表中去,注意:新插入的放置到旧的前面。当指定的钩子事件被触发后,局部钩子只需要调用进程中的钩子函数来预处理事件,全局钩子则需要把处理插入到其他地址空间,要做到这一点,就需要有一个动态连接库,把钩子函数放到库中。但有两个是例外,就是日志钩子和日志回放钩子,它是一种比较特殊的转载 2010-02-23 15:57:00 · 1437 阅读 · 0 评论 -
基于Visual C++的钩子编程技巧
摘要: 本文主要对钩子这种特殊的Windows编程机制进行了讨论并给出了鼠标钩子和键盘钩子的具体实现方法。 钩子概述 可以看出,钩子的本质是一段用以处理系统消息或特定事件的函数,通过系统调用将其挂入到系统。钩子的种类有很多,每一种钩子负责截获并处理相应的消息。钩子机制允许应用程序截获并处理发往指定窗口的消息或特定事件,其监视的窗口即可以是本进程内的也可以是由其他进程所创建的。在特定的消息发出后转载 2010-02-23 15:58:00 · 1393 阅读 · 0 评论 -
C++中的内存管理(new、delete、内存泄漏)
1. 使用new动态分配内存:若没有足够内存,则new返回0(空值指针null pointer);2. 不要使用delete释放不是new分配的内存,delete释放指针指向的内存,但不会删除指针本身; 3、对空值指针应用delete是安全的;4、创建数组时的静态联编与动态联编:数组声名int a[10], 静态联编,数组的长度在编译时确定; 用new[]创建数组,动态联编,运行时为数组分转载 2010-02-23 15:59:00 · 1385 阅读 · 0 评论 -
VC调试
概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工转载 2010-02-23 16:40:00 · 1207 阅读 · 0 评论 -
检测内存泄漏
最近看了周星星 Blog 中的一篇文章:“VC++6.0中内存泄漏检测”,受益匪浅,便运行其例子代码想看看 Output 窗口中的输出结果,可惜怎么弄其输出都不是预期的东西,郁闷了半天,便到水坛里找到周星星,请求他指点一、二,然而未果。没有办法,最后我一头栽进 MSDN 库狂搜了一把,功夫不负有心人,我搜出很多有关这方面的资料,没过多久我便基本上就找到了答案...... 首先,检测内存泄漏的基转载 2010-02-26 15:32:00 · 1470 阅读 · 0 评论 -
线程通信
线程之间交换信息称为线程通信。线程之间要传送的数据较多,必须使用如共享主存、管道流等通信方式。管道用来把一个程序输出连接到另一程序输入。java.io中提供了PipedInputStream和PipedOutputStream类作为管道的输入输出部件。线程使用管道通信一般分为三步:创建输入输出管道流;连接输入输出流管道;向输出流管道写和从输入流管道读。1.创建管道流PipedInp转载 2010-02-25 09:06:00 · 1274 阅读 · 0 评论 -
VC中TRACE()的用法
个人总结:最近看网络编程是碰到了TRACE语句,不知道在哪里输出,查了一晚上资料也没找出来,今天终于在优快云上找到了,真是个高地方啊,方法如下:1.在MFC中加入TRACE语句2.在TOOLS->MFC TRACER中选择 “ENABLE TRACING”点击OK3.进行调试运行,GO(F5)(特别注意:不是执行‘!’以前之所以不能看到TRACE内容,是因为不是调试执行,而是‘!’了转载 2010-02-26 15:34:00 · 4432 阅读 · 1 评论 -
函数指针和指针函数
【函数指针】 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面转载 2010-03-03 09:04:00 · 1098 阅读 · 0 评论 -
OpenGL基本框架
/******************************by CRACKER007*******************************/ BOOL CGdlg::InitialPixelFormat() //此函数被后面的CreateRC调用{ static PIXELFORMATDESCRIPTOR pfd= { sizeof(PIXELFORMATDESC转载 2010-03-03 14:49:00 · 2096 阅读 · 0 评论 -
GLUT库与GLAUX库
GLUT库 为了在初期简化编程负担,可以使用独立于平台的GLUT库,在网上可以找到库、源文件、说明书,基于GLUT的WINDOWS应用程序是WIN32 CONSOL程序,主程序是int main(int,void **),在其中可以只用两三行打开一个窗口,并以填写几个回调函数的方式实现程序功能,省掉了与窗口系统打交道的麻烦。另外,该库是做跨平台应用的首选,它在几乎所有的平台上都可用。目前还没有找转载 2010-03-03 14:56:00 · 6432 阅读 · 5 评论 -
VC OpenGL框架
//窗口及OpenGL所使用的库的头文件#include //视窗头文件#include #include #include //定义程序中计划使用的所有变量HWND hWnd=NULL; //得到窗口的句柄HDC hDC=NULL; //私有的GDI设备环境HGLRC hRC=NULL; /转载 2010-03-03 14:51:00 · 2400 阅读 · 1 评论 -
内核模式下的线程同步——事件内核对象
事件(Event)对象可以说是最简单的内核对象,它包含一个引用计数、一个用来表示该对象是自动重置还是手动重置的布尔值和一个表示对象当前状态(signaled或unsignaled)的布尔值。事件标志着某动作的完成,事件对象分为两类:manual-reset(手动重置事件)和auto-reset(自动重置)事件。当manual-reset事件状态变为signaled时,所有等待该事件的线程都成为可调转载 2010-03-02 13:08:00 · 1621 阅读 · 0 评论 -
使用动态链接库
1 究竟什么是DLL 动态链接库是程序模块,它包括代码、数据或资源,能够被其他的Wi n d o w s应用程序共享。DLL的主要特点之一是应用程序可以在运行时调入代码执行,而不是在编译时链接代码,因此,多个应用程序可以共享同一个D L L的代码。事实上,文件Kernel32.dll、User32.dll、GDI32.dll就是核心Win32系统的动态链接库。Kernel.dll负责内存、转载 2010-03-02 13:12:00 · 1414 阅读 · 0 评论 -
内核对象与用户对象/GDI对象
一、内核对象 1.可以理解为操作系统使用和管理的控制块,例如嵌入式操作系统里的任务控制块,邮箱控制块等。 2.内核对象中有少数的静态成员(全局可见)。 3.只有通过调用windows api 才能使用内核对象。 4.内核对象的作用域是基于进程的,这样做处于安全和健壮型考虑。 5.内核对象有一个静态成员用来计数,当内核对象被创建时计数值转载 2010-03-03 09:09:00 · 1947 阅读 · 0 评论 -
VC 预编译头
预编译头的概念:在很多程序中,每个源文件都存在一些相同的部分。比如要包括相同的一些头文件,而且这些头文件可能很长,例如window.h。如果用普通的方法编译这些源文件,对这些头文件在每个源文件中的出现都要重新编译,作了很多重复工作。如果能将这些头文件专门进行编译,并且把结果存储起来。然后在编译包含这些头文件的源文件时,使用上述结果替代头文件在源文件中的出现,就可以大大减少工作量。Microso原创 2010-03-03 13:34:00 · 1608 阅读 · 0 评论 -
VC6.0 VS2008 openGL环境配置
一、下载并安装glut库 opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,转载 2010-03-01 15:41:00 · 5956 阅读 · 4 评论 -
内核对象
众所周知,Windows 编程最基础的还是对资源的利用、控制操作,资源是一个比较具体的东西,比如 CPU、内存等等。那么怎么来对资源进行操作呢,我们通常是通过“对象”与“资源”去打交道(这是本人现在的理解,可能有误)。而对象又可以分为“用户对象”、“GDI 对象”和“内核对象”。 显然被称作“内核对象”,他肯定是只能被内核访问的创建于内存中的“数据结构”,也就是说,内核对象只是一块存储空间,这转载 2010-03-02 13:09:00 · 1262 阅读 · 0 评论