c/c++
文章平均质量分 81
Crazy_Tortoise
A Crazy Tortoise
展开
-
C++的成员函数作为回调函数
如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。通过查询资料发现,其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递一个指向自身的指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成员函数但是确有不同的数据成员。由于this指针的作用,使得将一个CALLBACK型的成员函数作转载 2013-10-16 15:53:14 · 544 阅读 · 0 评论 -
.c 文件和 .h 文件的区别 以及 链接出错的问题(三)
原文地址:http://www.cnblogs.com/shiney/archive/2011/10/20/2219084.html造成LNK2005错误主要有以下几种情况: 1.重复定义全局变量。可能存在两种情况: A、对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确的应该是在一个CPP文件中定转载 2013-12-02 00:26:18 · 976 阅读 · 0 评论 -
.c 文件和 .h 文件的区别 以及 链接出错的问题(二)
1.头文件可以预先告诉编译器一些必要的声明,让编译器顺利进行下去,在连接实现以前.未必出现实际的定义. 头文件的意义在 a.使得程序简明,清晰. b.避免了重复编写相同的声明代码. 2.**.c和**.h文件没有必然的联系., 在XX.h文件中声明变量,如int a;,即时在XX.c中include"XX.h", 直接赋值 a = 2;仍然会出错,需要使用 int a = 2原创 2013-12-02 01:20:22 · 957 阅读 · 0 评论 -
声音的播放——MCI的使用
很多朋友向我索取MCI的资料,但是我这里的资料早就不知道哪里去了,这里把MSDN里面的东西拿出来给大家看一下,方便英语不好的朋友。用MCI进行编程主要有两个东西需要掌握,下面的篇幅用来说明这两个方面。一、mciSendCommand函数这个函数用来打开MCI设备并且通过给设备发送MCI命令来对设备进行控制,这个函数的原型是这样的:MCIERROR mciSendCommand(转载 2014-01-09 15:19:03 · 1494 阅读 · 0 评论 -
Unicode 编码
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 Unicode 编码系统,可分为编码方式和实现方式两个层次。Unicode用数字0-0x10FFFF (( {注意,这并不表示最多用三个字节就可以原创 2014-01-10 10:55:31 · 1095 阅读 · 0 评论 -
C++ bad ptr 情形1例
c++ 中对一块内存初始化可以使用 memset 函数,需要注意memset函数的参数void *memset(void *s,int c,size_t n) 总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。对于数组进行初始化, 参数3内存大小设置为sizeof(array) 就可以;而对于指针进行初始化,则需要 为sizeof(type) * n 求出确切的内存大小。转载 2014-01-10 13:13:53 · 1562 阅读 · 0 评论 -
VC 中字符串比较和查找
目前可以认为最高效的方式是调用:StrChrI 因为这是API,不是CRT函数。 由于相应的DLL早已经加载到内存,所以调用起来高效。 [cpp] view plaincopyprint?另,可参考: 常用字符串函数 1. 字符串比较函数 //比较两个字符串是否相同 int StrCmp(LPCTSTR lpStr1转载 2014-01-10 09:46:29 · 3689 阅读 · 0 评论 -
android NDK 交叉编译
原文地址 http://blog.csdn.net/xuxinyl/article/details/6534776android中间件开发,本来利用NDK就直接生成了一个SO文件,然后直接打包到APK里,即可运行,但是由于一般真机是不带有root权限的,即使SSH可以解决root权限,当到了java层,root权限又失效了。经常碰到operation not permitte转载 2014-03-02 02:09:51 · 799 阅读 · 0 评论 -
.c 文件和 .h 文件的区别 以及 链接出错的问题(一)
关于两者以前的关系,要从N年以前说起了~ long long ago,once aupon a time .......那是一个被遗忘的年代,在编译器只认识.c(.cpp))文件,而不知道.h是何物的年代。那时的人们写了很多的.c(.cpp)文件,渐渐地,人们发现在很多.c(.cpp)文件中的声明语句就是相同的,但他们却不得不一个字一个字地重复地将这些内容敲入每个.c(.cpp)文件。但更转载 2013-12-01 23:48:47 · 1892 阅读 · 1 评论 -
.c 文件和 .h 文件的区别 以及 链接出错的问题(四)
预编译#ifdefx, #define x, #endif 和 #pragma once 对防止多次编译和重定义以及链接错误的关系预编译 和 #pragma once 只是防止某个头文件出现多次编译,这种防止只是在生成单个目标文件的时候才会起作用。具体的场景比如: 在a.h文件中声明了一些结构体或者类(注意是声明,如果是定义,直接出现重定义错;而且不是函数),在b.h文原创 2013-12-02 01:39:25 · 853 阅读 · 0 评论 -
stdafx.h, stdafx.cpp的作用
在使用Vs2010 Qt插件进行界面层程序的开发的时候,创建了Qt应用程序,在程序中使用了第三方库目录和文件无法使用,最后发现是创建爱你工程时没有创建预编译文件的原因。stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展)。所谓头文件预编译,就是把一个工程(Project)中使用的一些标准头文件(如Wi原创 2013-10-21 08:58:12 · 880 阅读 · 0 评论 -
服务器应用--双缓冲队列
原文地址: http://blog.csdn.net/markman101/article/details/7083078在服务器开发中 通常的做法是 把 逻辑处理线程和I/O处理线程分离。 逻辑处理线程:对接收的包进行逻辑处理。 I/0处理线程:网络数据的发送和接收,连接的建立和维护。 通常 逻辑处理线程和I/O处理线程是通过数据队列来交换数据,就是生转载 2013-11-18 00:28:35 · 1375 阅读 · 1 评论 -
线程中CreateEvent和SetEvent及WaitForSingleObject的用法
首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面.CreateEvent函功能描述:创建或打开一个命名的或无名的事件对象.EVENT有两种状态:发信号,不发信号。 SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号。 WaitForSingleObject()等待,直到参数所指定的转载 2013-11-18 10:32:20 · 592 阅读 · 0 评论 -
计算结构体的大小
原文地址:http://blog.csdn.net/csw_100/article/details/5495309结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存空间。和数组不一样的是,结构体的大小不是所有成员大小简单的相加,需要考虑到系统在存储结构体变量时的地址对齐问题。看下面这样的一个结构体: struct stu1 { int转载 2013-11-19 09:46:57 · 626 阅读 · 0 评论 -
Msys/MinGW与Cygwin/gcc
本文转自:http://www.lupaworld.com/273398/viewspace-122539.html一 MinGWMinGW 官方网站为 http://www.mingw.org/MinGW,即 Minimalist GNU For Windows(GCC compiler suite)。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链转载 2013-11-06 10:40:55 · 632 阅读 · 0 评论 -
VS2010下创建静态链接库和动态链接库
原文地址:http://blog.csdn.net/love_cppandc/article/details/85027731.静态链接库打开VS2010,新建一个项目,选择win32项目,点击确定,选择静态库这个选项,预编译头文件可选可不选。在这个空项目中,添加一个.h文件和一个.cpp文件。名字我们起为static.h和static.cppstatic.h文件:转载 2013-11-07 15:07:17 · 508 阅读 · 0 评论 -
volatile 变量
原文地址: http://blog.csdn.net/suhuaiqiang_janlay/article/details/5942659 volatile变量的意思是易变的,它的主要作用是避免编译器优化,编译器优化是什么意思? 举个例子,为了避免过多的访问内存,编译器会为变量作一个cache,里面会存放上变量的copy, 这样就会提高程序执行效率,而变量如果加了v转载 2013-11-22 17:52:21 · 761 阅读 · 0 评论 -
COM聚合
原文地址: http://blog.csdn.net/csfreebird/article/details/1154730COM聚合聚合的概念内部组件的实现外部组件的实现ATL7对内部组件的支持分析:DECLARE_CLASSFACTORY()宏-------------DECLARE_AGGREGATABLE(T)宏---------------------转载 2013-11-08 20:23:51 · 611 阅读 · 0 评论 -
_BLOCK_TYPE_IS_VALID(pHead->nBlockUse问题解析
原文地址:http://blog.sina.com.cn/s/blog_5a6f39cf01014q9i.html 在用D3DX写程序,遇到了一些问题,_BLOCK_TYPE_IS_VALID(pHead->nBlockUse是其中的一个,后来在网上查了一下,得到相关信息,特记录一下,以备查看。 问题产生原因: 1.内存泄漏;所以当程序退出时,系统会转载 2013-11-09 13:36:53 · 737 阅读 · 0 评论 -
InstallShield 12 制作安装包
原文地址:http://blog.csdn.net/plfl520/article/details/4358968目 录一、 InstallShield安装二、 InstallShield 破解三、 制作安装包(一) 打开工程(二) 工程助手页面1、Application Information:程序信息2、Installati转载 2013-11-14 16:50:22 · 1132 阅读 · 0 评论 -
标准C++中的string类的用法总结
要想使用标准C++中string类,必须要包含#include // 注意是,不是,带.h的是C语言中的头文件using std::string;using std::wstring;或using namespace std;下面你就可以使用string/wstring了,它们两分别对应着char和wchar_t。string和wstring的用法是一样的,以下只用转载 2014-07-17 23:10:59 · 528 阅读 · 0 评论 -
c++ STL(一)
1、c++ 标准程序库中的所有标识符都定义于一个名为std的namespace。转载 2014-06-08 12:52:51 · 551 阅读 · 0 评论 -
STL容器介绍
STL的容器可以分为以下几个大类: 一:序列容器, 有vector, list, deque, string.二 : 关联容器, 有set, multiset, map, mulmap, hash_set, hash_map, hash_multiset, hash_multimap三: 其他的杂项: stack, queue, valarray, bitset转载 2014-06-07 10:03:57 · 537 阅读 · 0 评论 -
c++ STL(二)
1、STL迭代器头文件转载 2014-06-09 16:18:27 · 533 阅读 · 0 评论 -
模板和模板特化
模板分为函数模板和类模板函数模板:是一种抽象函数定义,它代表一类同构函数。类模板:是一种更高层次的抽象的类定义。特化s函数模板的特化:当函数模板需要对某些类型进行特化处理,称为函数模板的特化。类模板的特化:当类模板内需要对某些类型进行特别处理时,使用类模板的特化。转载 2014-05-31 19:22:51 · 723 阅读 · 0 评论 -
函数对象(c++)
函数对象(Function objects)是指定义了函数调用操作符(operator())这一成员函数的任意对象。除了可以创建与操作自定义的函数对象以外,C++ 标准库还提供了大量的内置函数对象。转载 2014-05-31 10:34:37 · 670 阅读 · 0 评论 -
Linux进程通信之POSIX消息队列
消息队列是Linux IPC中很常用的一种通信方式,它通常用来在不同进程间发送特定格式的消息数据。消息队列和之前讨论过的管道和FIFO有很大的区别,主要有以下两点:一个进程向消息队列写入消息之前,并不需要某个进程在该队列上等待该消息的到达,而管道和FIFO是相反的,进程向其中写消息时,管道和FIFO必需已经打开来读,否则写进程就会阻塞(默认情况下)。 IPC的持续性不同。管道和FIFO转载 2014-07-25 16:42:55 · 778 阅读 · 0 评论 -
Effective C++ 摘记(一)
(一)、让自己习惯C++一、C++语言联邦多重范型编程语言:过程式、面向对象式、函数式编程、泛型编程、模板元编程。二、const、enum、inline替换#defineconst:代替宏变量有助于编译器理解;可以实现类内的常量定义(宏定义对全局有效,不具有封装性)enum:enum hack,更像define,不消耗内存,无法取地址;inline:宏函数尽量用in转载 2014-06-01 15:19:16 · 659 阅读 · 0 评论 -
Linux进程同步之POSIX信号量
原文地址: http://blog.csdn.net/anonymalias/article/details/9219945POSIX信号量是属于POSIX标准系统接口定义的实时扩展部分。在SUS(Single UNIX Specification)单一规范中,定义的XSI IPC中也同样定义了人们通常称为System V信号量的系统接口。信号量作为进程间同步的工具是很常用的一转载 2014-07-25 18:47:56 · 627 阅读 · 0 评论 -
Linux进程通信之管道和FIFO
原文地址:http://blog.csdn.net/anonymalias/article/details/9391743Linux进程间的通信可以简称为IPC(Interprocess Communication),前面说过的 Linux的同步工具也是属于IPC的一部分,这里我想说的是通常意义的进程间的实际数据通。1管道管道是最早的UNIX IPC,所有的UNIX转载 2014-07-25 18:46:13 · 851 阅读 · 0 评论 -
effective c++ -- 模板与泛型编程
面向对象提供了运行期的多态,而模板则提供了编译期的多态。模板的编译期多态机制使得函数匹配机制相对于非模板的函数匹配发生了一些变化,也影响了继承体系下的一些声明与设计。本章讲解了模板的编译期多态对我们原先所熟悉的没有模板的世界的一些区别,最后介绍了traits class以及template元编程。Item 41: 了解隐式接口和编译期多态 通常显式接口由函数的签名式(函数名称、参数转载 2014-06-02 18:44:26 · 798 阅读 · 0 评论 -
Effective C++ 摘记(三)
(一)、让自己习惯C++一、C++语言联邦多重范型编程语言:过程式、面向对象式、函数式编程、泛型编程、模板元编程。二、const、enum、inline替换#defineconst:代替宏变量有助于编译器理解;enum:enum hack,更像define,不消耗内存,无法取地址;inline:宏函数尽量用inline代替。三、constconst返回值:避免(a*转载 2014-05-17 19:54:23 · 700 阅读 · 0 评论 -
Linux定时器的使用
使用定时器的目的无非是为了周期性的执行某一任务,或者是到了一个指定时间去执行某一个任务。要达到这一目的,一般有两个常见的比较有效的方法。一个是用linux内部的三个定时器,另一个是用sleep, usleep函数让进程睡眠一段时间,使用alarm定时发出一个信号,还有那就是用gettimeofday, difftime等自己来计算时间间隔,然后时间到了就执行某一任务,但是这种方法效率低,所以不常用转载 2014-03-05 14:31:12 · 762 阅读 · 0 评论 -
C++全局变量的声明和定义
参考:http://wrchen.blog.sohu.com/71617539.html(1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件;第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件。 那么,错误可能在两个地方产转载 2014-03-22 10:34:57 · 673 阅读 · 0 评论 -
软件设计之模块划分
在一些小型的项目当中,由于项目的关系简单,规模较小,所以有时候负责完成项目的往往是一个人或者几个人。这个时候对于模块的概念和应用显得很少,因为项目规模较小的原因,模块划分的重要性难以体现。但是,在一些大型项目中,就必须充分考虑到模块划分,因为参与项目的人数往往有很多人,同时人员变动很大。如果不充分进行模块划分的话,那么就会造成很严重的问题。这就相当于在乡下盖房子,可以自己几个人承包下来,也不需要设转载 2014-04-25 18:19:45 · 869 阅读 · 0 评论 -
C/C++语言extern使用方法总结
Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义。谨记:声明可以多次,定义只能一次。 函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern的。但是引用的时候一样是需要声明的。而全局变量在外部使用声明时,extern关键词是必须的,如果变量无extern修饰且没有显式的初始化,同样成为变量的定义,因此此时必须加extern,而编译器在此转载 2014-05-17 18:51:22 · 785 阅读 · 0 评论 -
C++ static、const和static const 以及它们的初始化
首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数:void Foo() { static int a=3; // initialize std::cout a++; } 这里的static int a=3只执行了一次。在main中调用Foo()两次,结果为34.将上面的函数改为view plaincop转载 2014-05-17 20:07:04 · 500 阅读 · 0 评论 -
C++ 隐式类类型转化 Implicit
一些类的构造器总是用explicit修饰,这是为什么呢?它是做什么用的呢?我们先看看这个程序:#include #include using namespace std;class MyClass{public: MyClass(string n = "name") : name(n)转载 2014-05-17 18:49:35 · 1826 阅读 · 0 评论 -
static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
隐式转换(implicit conversion)short a=2000;int b;b=a;short是两字节,int是四字节,由short型转成int型是宽化转换(bit位数增多),编译器没有warning,如下图所示。宽化转换(如char到int,int到long long,int到float,float到double,int到double等)构成隐式转换,编译器允许直接转转载 2014-05-18 12:26:32 · 485 阅读 · 0 评论 -
c++模板与泛型编程基础
泛型编程就是以独立于任何特定类型的方式编写代码,而模板是泛型编程的基础。(1)定义函数模板(function template)函数模板是一个独立于类型的函数,可以产生函数的特定类型版本。// implement strcmp-like generic compare functiontemplate int compare(const T &v1, const T &转载 2014-06-02 18:21:59 · 572 阅读 · 0 评论