C++
markman101
这个作者很懒,什么都没留下…
展开
-
我的编程语言经历
Alan Perlis 说过:“一种不改变你编程的思维方式的语言,不值得去学。”,虽然写了这么多年程序,用了这么多的语言,但我自认还没悟道编程语言如何改变我的思维方式。几天前,我需要用python来为 ledisdb 写一个客户端,我突然发现,对于c++,go这种语言,我如果需要实现一个功能,首先想到的是问题是代码应该怎么写。但是当我使用python的时候,我首先考虑的问题是在哪里去找一个转载 2014-09-17 17:21:52 · 2065 阅读 · 0 评论 -
VS2003"无法启动调试 没有正确安装调试器"的解决方法
在用VS2003做项目的时候,经常调试程序,但是有时候回出现如下问题“无法启动调试,没有正确安装调试器,请运行安装程序或修复调试器”。第一次碰到还以为是运气不好,就重新用vs2003安装程序重新修复了这个工具,可以使用了。但是运行了一段时间又出现了如上这种问题,郁闷了我很久。因为修复一下这个工具要花费很多时间的,于是从网上找了资料,把问题给解决了。 主要原因:大部分问题都是因为,mdm转载 2011-11-15 10:38:54 · 1070 阅读 · 1 评论 -
C语言之详解#ifdef等宏
有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2#include "iostream转载 2011-12-01 15:50:33 · 1121 阅读 · 0 评论 -
Source Insight 函数名乱码
函数名不知道为什么显示成一堆不认识的字符。鼓捣了半天也不知道为什么,后来好不容易从网上找来解决方案。唉,太简单了。就是把在代码编辑区把函数名选中,然后右击选则Style Properties(右键菜单很长,慢慢找,是倒数第几个),到里面把字体设置一下就好了。唉,说白了就是字体没选对。转载 2011-12-01 11:42:40 · 3254 阅读 · 0 评论 -
main 命令行参数举例理解
背景知识:main(int argc,char *argv[ ])argv为指针的指针argc为整数举例:假设程序的名称为prog,在命令行中只输入prog,则由操作系统传来的参数:argc值为1 argv(具体在argv[0]) 中存储输入程序的路径和名称当输入形式为:prog para_1 para_2转载 2011-12-01 14:17:30 · 1119 阅读 · 0 评论 -
C++--模式之单例模式
单例模式也称为单件模式、单子模式。使用单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出等。 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显得很不优雅。《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有转载 2011-11-02 16:54:35 · 84 阅读 · 0 评论 -
互斥量理解
1 HANDLE hMutex; hMutex = ::CreateMutex(NULL, FALSE, NULL); 重点说明 第二个参数 FALSE 表明创建的互斥量 不被任何任何线程所拥有,也就是说这个互斥量是出于激发状态的也就是 有信号状态。 调用::ReleaseMutex()是把互斥量变为有信号。原创 2011-10-21 15:59:27 · 593 阅读 · 0 评论 -
C++ ---- 友元线程函数
派生类功能执行时 会很消耗系统资源 而且功能执行时还会调用 父类函数。多线程程序的线程函数需要使用类的成员变量和成员函数时,通常通过定义线程函数为类的友元函数,然后才能像类自己的成员函数一样访问其成员变量和成员函数。这种方式非常的方便尤其相对于通过定义全局线程函数和定义类的静态成员线程函数的方法有很大的优点,它能够访问类所有的成员变量和成员函数。CTaskRecordQuer原创 2011-10-21 10:14:51 · 1310 阅读 · 0 评论 -
linux/unix 下精确获取系统时间
在分析LIVE555代码时 偶获:if (fIsFirstPacket) { // Record the fact that we're starting to play now: gettimeofday(&fNextSendTime, NULL);原创 2011-07-30 08:52:31 · 2601 阅读 · 0 评论 -
C 运算符优先级 口诀
括号成员第一; //括号运算符[]() 成员运算符. ->全体单目第二; //所有的单目运算符比如++、 --、 +(正)、 -(负) 、指针运算*、&乘除余三,加减四; //这个"余"是指取余运算即%移位五,关系六; //移位运算符:>转载 2011-07-18 11:31:09 · 645 阅读 · 0 评论 -
extern变量
理论:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。举例:某项目包含多个*.C文件.比如main.c和file.c.在main.c中定义char wdi = 0;.....if (wdi%2==0){原创 2011-07-27 14:58:51 · 717 阅读 · 0 评论 -
time_t 转字符串
char timestrcur[40];char timestrend[40];struct tm *tmtest = NULL;tmtest = localtime(&t2); strftime(timestrcur,sizeof(timestrcur),"%Y-%m-%d %H-%M-%S",tmtest);转载 2011-05-30 17:27:00 · 2213 阅读 · 0 评论 -
#ifdef __cplusplus 学习
<br />时常在cpp的代码之中看到这样的代码: <br />#ifdef __cplusplus <br />extern "C" { <br />#endif <br />//一段代码 <br />#ifdef __cplusplus <br />} <br />#endif <br /><br /><br />这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp转载 2011-05-19 18:12:00 · 490 阅读 · 0 评论 -
STL中map用法
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有转载 2011-12-05 21:57:15 · 540 阅读 · 0 评论 -
strtok 用法
char * strtok (char * str, const char * delimiters);函数说明C++ strtok()用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串,当strtok()在参数str的字符串中发现到参数delimiters的分割字符时则会将该字符改为'\0'字符。在第一次调用时,strtok()必需给予参数转载 2011-12-08 16:09:38 · 581 阅读 · 0 评论 -
服务器程序设计初探
换工作了后,很久没有来写点什么,总感觉时间不够用。一则工作上的事情比较多;在生活上的时间也比较多。闲话不说,直接谈谈服务器程序的设计的几个部分1。内存分配内存分配对于任何程序都是很重要的,如何分配内存,如何减少频繁的内存分配,如何提高内存的使用效率,减少内存碎片都是需要值得好好研究的问题;对于内存要求比较高的系统,还要考虑内存不够的情况。一般的程序,都会将内存的操作封装成几个函数,一次请求转载 2011-12-08 22:33:35 · 851 阅读 · 1 评论 -
全局函数的使用
使用方法:原创 2014-07-31 13:56:46 · 1843 阅读 · 0 评论 -
static和extern的使用
1、修饰局部变量 static修饰局部变量,该局部变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束,但作用域仍限于该语句块。 特别注意的是,用static修饰局部变量后,该变量只在初次运行时进行初始化工作,且只进行一次。 程序执行结果为: 2 3 对于静态局部变量如果没有进行初始化的话,对于整形变量系统会自动对其赋转载 2014-07-31 13:42:30 · 891 阅读 · 0 评论 -
面向接口编程实例篇
问题的提出定义:现在我们要开发一个应用,模拟移动存储设备的读写,即计算机与U盘、MP3、移动硬盘等设备进行数据交换。上下文(环境):已知要实现U盘、MP3播放器、移动硬盘三种移动存储设备,要求计算机能同这三种设备进行数据交换,并且以后可能会有新的第三方的移动存储设备,所以计算机必须有扩展性,能与目前未知而以后可能会出现的存储设备进行数据交换。各个存储设备间读、写的实现方法不同,U盘和移转载 2014-05-23 09:26:35 · 1673 阅读 · 0 评论 -
C++ 构造函数浅析
1、C++ 构造函数分类原创 2014-07-16 13:37:41 · 779 阅读 · 0 评论 -
篮子、水果和鸡蛋——关于C++的模板偏特化和萃取编程技法
最近在读《STL源码剖析》。读这本书的时候发现自己的C++的知识其实是非常匮乏的。 从大学的C++教材上学到一些C++基本的语法、内存管理、继承、多态等方面的基础知识。这些只是是一棵大树的根。而读STL的源码和侯捷的解析的时候,发现C++还有很多丰富的细节和技巧。这些是大树上的枝叶。学习C++,不仅要学习根,也要学习枝叶,这样才能让大树茂盛起来。虽然C++语法一些用法较为晦涩,但读完这些代码之后觉转载 2014-04-17 09:57:39 · 1335 阅读 · 0 评论 -
Semaphore 使用
Semaphore是另一个同步问题机制,不论是Event或Mutex,其他Process在执WaitForSingleObject时,就看当时的物件是Signal或UnSignal而决定是否等待,而Semaphore也相同,但是它要变成Signal /UnSignal的状态,却有些不同,它是提供一个计数值,它允许在这个计数值之内,任何执行到WaitForSingleObject的Thr转载 2012-06-20 10:36:53 · 741 阅读 · 0 评论 -
VC++ 反汇编定位程序崩溃位置
程序运行时出错 用事件查看器查看出错位置:程序源码如下:#include "stdafx.h"typedef struct def{ int i ;}DEF;int main(){ DEF* de; int j = de->i; return 0;}在程序中设置断点然后启动反汇编:查看 0X0040102B位置 就是程原创 2012-01-17 11:02:22 · 3041 阅读 · 0 评论 -
浮点数比较方法
函数原型:原型:extern float fabs(float x); 用法:#include 功能:求浮点数x的绝对值 说明:计算|x|, 当x不为负时返回x,否则返回-x举例:其中channelVec[j].videoFreq =754.0m_nCurrentFreq = 754000000fabs(channelVec[j].vi原创 2012-01-08 10:28:24 · 688 阅读 · 0 评论 -
模板类的使用---模板类,最好连同实现都放到.h里头
1. 将C++模板类的声明和定义都放在一个文件,如.h或.cpp文件中 使用的时候加入#include "模板类文件名.h(或.cpp)“即可。 2. 将C++模板类的声明和定义分别放在.h和.cpp文件中 且在.cpp文件中包含 #include ".h" 不过在使用时,会因为不同的开发环境而有所不同: a. 在集成开发环境code::blo转载 2011-12-26 10:14:09 · 1201 阅读 · 0 评论 -
string 用法小结
1 long to char * char basetime[32];long mBaseTime;mBaseTime = (long)time(NULL);memset(basetime,0,sizeof(basetime));ltoa(mBaseTime,basetime,10); basetime:“1345636789”2 cha原创 2011-12-15 17:08:29 · 540 阅读 · 0 评论 -
类模板与模板类
1.类模板与模板类的概念⑴ 什么是类模板 一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。 如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表着一类类。转载 2011-12-21 11:33:10 · 577 阅读 · 0 评论 -
C语言 文件操作
<br />fopen()原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针。<br /> 参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下:<br /> 字符串 含义<br /> "r" 以只读方式打开文件<br /> "w" 以只写方式打开文件<br /> "a"转载 2011-05-19 18:11:00 · 589 阅读 · 0 评论 -
虚析构函数
<br />虚析构函数是为了解决这样的一个问题:基类的指针指向派生类对象,并用基类的指针删除派生类对象。转载 2011-05-18 23:02:00 · 491 阅读 · 0 评论 -
C++类设计原则
<br />class CCodecMgr<br />{<br />public:<br /> CCodecMgr();<br /> virtual ~CCodecMgr();<br /> <br /> BOOL InitCodecV(BITMAPINFO bmp); <br /> void DestroyCodecV();<br /> BOOL EncodeVideoData(char* pin,int len,char* pout,int* lenr,BOOL* pKey);<br /> BOOL D转载 2010-09-03 21:31:00 · 767 阅读 · 0 评论 -
变量的定义和声明
1 广义地说,声明包含定义,但并非所有的声明都是定义。对于“int lower_limit;”来说,它既是声明又是定义;而对“extern lower_limit;”来说,它是声明不是定义。“声明”仅仅告诉编译器变量名的值的类型而已,不会生成目标代码,当然也不会给它分配存储空间,更不会增大可执行程序的体积。由于声明并不分配存储空间,因此同一个声明可以在程序中多次出现。它的位置可在执行代码之外,也可在执行代码里面。而“定义”不仅要告诉编译器变量名的值的类型,而且还要给变量分配存储空间。既然在定义变量时就已经建转载 2010-09-03 11:39:00 · 592 阅读 · 0 评论 -
在头文件定义全局变量以后
1glo.h#ifndef _GLO_H_#define _GLO_H_ DWORD test; #endif// _GLO_H#if !defined(AFX_1_H__7B1238F7_C7C0_49EF_8C9A_CAB897B6C2A3__INCLUDED_)#define AFX_1_H__7B1238F7_C7C0_49EF_8C9A_CAB897B6C2A3__INCLUDED_#if _MSC_VER > 1000#pragm原创 2010-09-03 14:08:00 · 1348 阅读 · 0 评论 -
l-value specifies const object
<br /> <br />在C++中,由const修饰的成员函数的函数体内部,是不能够对成员变量进行修改的。这个特性被用来保证某些成员函数在实现过程中,避免由于程序员大意而对数据进行了错误的修改;同时也说明此成员函数是非修改性的。如只需要返回成员变量的成员函数就被声明为const类型(const的位置在函数定义参数列表之后)<br /> 推广开来,在const成员函数中也不能够调用非const的成员函数。这是因为非const成员函数可能会改变成员变量的值,这与const成员函数的定义相违背。<转载 2010-08-27 14:33:00 · 3794 阅读 · 0 评论 -
error C2166: l-value specifies const object
<br />关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员<br /> 我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,<br /> 对像的状态也会随之发生变化! <br /> 如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是<br /> 该函数不会修改类的非静态数据成员.但是有些时候需要在该类函数中对类的数据成员<br /> 进行赋值.这个时候就需要用到mutable关键字了<br /> 例如:转载 2010-08-27 14:30:00 · 4297 阅读 · 0 评论 -
LONGLONG to char *
<br /> LONGLONG test=0x0F2345FF87654321;<br /> char str[65]={0}; <br /> sprintf(str, "%I64d", test);//十进制显示方式<br /> sprintf(str, "%I64x", test);//十六进制显示方式<br />显示结果:1090792498544329505<br /> <br /> f2345ff87654321<br />原创 2010-08-27 11:45:00 · 2108 阅读 · 0 评论 -
我常去的编程技术网站
<br /> <br /><br />[汇编语言] <br />http://www.asmcommunity.net/<br />http://www.masm32.com/ [Win32 Asm]<br />http://www.cs.cmu.edu/~ralf/files.html [x86中断列表]<br />http://www.nasm.us/ [NASM]<br />http://www.winasm.net/ [Winasm汇编编辑器]<br />http://x86asm.net/inde转载 2010-06-02 12:39:00 · 660 阅读 · 0 评论 -
关于感染型病毒的那些事(三)
前段时间,我在网上下载了一个3D游戏,想要玩的时候却被提示需要将IE的主页设置为特定的网址才能玩这个游戏.对于我这种有"系统洁癖"的人来说,最反感的就是这种要求,用Peid查了下,发现没有加壳,一路跟下来,发现这个程序也提供了一种病毒感染的思路,那就是资源感染,既将宿主程序作为病毒程序的一个资源保存,将附加了宿主程序资源的病毒程序覆盖原宿主程序,在打开病毒程序时,病毒发作同时将宿主程序释放出来,运行之.这个3D游戏的反汇编片段:/**************************************转载 2010-07-01 12:25:00 · 674 阅读 · 0 评论 -
一个内存错误的引起
1分配内存MPEG4_DATA * CMyDlg::GetDatabuf(int size){ MPEG4_DATA * Frame; Frame=new MPEG4_DATA; Frame->max_size=size; Frame->buf=new char[size]; return Frame;}2 释放内存 void CMyDlg::FreeDatabuf(MPEG4_D原创 2010-05-06 15:04:00 · 772 阅读 · 0 评论 -
MessageBox 实现机制
intWINAPIMessageBox( HWND hWnd , LPSTR lpText, LPSTR lpCaption , UINT uType, DWORD dwTimeout ){ MESSAGEBOX_INFO mbi; HANDLE hThread; DWORD id;转载 2010-04-16 09:25:00 · 1213 阅读 · 0 评论 -
如何查看direct版本
在运行中输入dxdiag原创 2010-04-16 10:01:00 · 2219 阅读 · 0 评论