
c/c++
文章平均质量分 53
jackytse_
不以物喜 . 不以己悲
展开
-
_GLIBCXX_USE_CXX11_ABI 定义不一致带来的宕机问题
@TOC很久没有写文章了,记录一下ABI 是什么我们看看wiki定义: 应用二进制接口(英语:application binary interface,缩写为ABI)是指两程序模块间的接口,一个ABI定义了机器代码如何访问数据结构与运算程序,此处所定义的界面相当低端并且相依于硬件。而类似概念的API则在源代码定义这些,则较为高端,并不直接相依于硬件,通常会是人类可阅读的代码。一个ABI常见的样貌即是调用约定:资料怎么成为计算程序的输入或者从中得到输出;x86的调用约定即是一个ABI...原创 2021-05-29 23:59:23 · 5711 阅读 · 7 评论 -
C/C++ file操作函数大全,很详细,很强大
clearerr(清除文件流的错误旗标)相关函数 feof表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf 表头文件 #include转载 2012-04-20 14:48:42 · 5808 阅读 · 0 评论 -
Windows系统默认调试器设置
Windows系统默认调试器设置1.使用运行打开drwtsn32 -i 注册华生医生到注册表如图:2.使用运行打开drwtsn32可以进行一些常用的设置如图: 3. 注册表设置:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AeDebug/DebuggerHKEY_LO原创 2012-06-11 17:47:49 · 5388 阅读 · 0 评论 -
在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()
游戏制作已经开始采用C++了,却鲜有人选择使用MFC。但笔者觉得的 ASSERT(),VERIFY()和 TRACE()这几个宏很好用。所以就想自己写一个版本来适应Windows平台下不同的工程类型。提醒: ASSERT()被测试它的参数,若参数为0,则中断执行并打印一段说明消息。在 Release 版本的程序中它不起任何作用。VERIFY()和 ASSERT()很相似,区转载 2012-07-23 00:37:35 · 2330 阅读 · 0 评论 -
为什么基类指针指向派生类是安全的,而派生类指向基类则是不安全的
例如: class a { public: int aa }; class b:public a { public: int bb; }从内存上来看如a---------||占一个int数据大小--||----(aa数据)------||---------而b则是---------|---------|占一原创 2012-07-29 00:51:12 · 5555 阅读 · 0 评论 -
printf 格式化输出符号详细说明
%a 浮点数、十六进制数字和p-记数法(c99%A 浮点数、十六进制数字和p-记法(c99)%c 一个字符(char)%C 一个ISO宽字符%d 有符号十进制整数(int)(%ld、%Ld:长整型数据(long),%hd:输出短整形。) %e 浮点数、e-记数法%E 浮点数、E-记数法%f 单精度浮点数(默认float)、十进制记数法(%.nf 这里n表示精确到小...原创 2011-09-28 17:54:46 · 195468 阅读 · 3 评论 -
如何加快C++代码的编译速度
C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速度,却只有低调的份了。比如我现在工作的源代码,哪怕使用Incredibuild调动近百台机子,一个完整的build也需要四个小时,恐怖!!!虽然平时开发一般不需要在本地做完整的build,但编译几个相关的工程就够你等上好一段时间的了(老外管这个叫monkey around,相当形象)。想想若干年在一台单核2.8GHZ上工作时的场景 -转载 2012-09-13 10:28:10 · 1579 阅读 · 0 评论 -
通过预编译头文件来提高C++ Builder的编译速度
C++ Builder是最快的C++编译器之一,从编译速度来说也可以说是最快的win32C++编译器了。除了速度之外,C++builder的性能也在其它C++编译器的之上,但许多Delphi程序员仍受不了C++builder工程的编译速度。的确,delphi的速度要比任和c++的编译器都要快好多。Delphi在编译一个小工程的时候可能不到一秒,大的工程一般也在5秒钟这内编译完成了。 为什转载 2012-09-13 10:20:50 · 1993 阅读 · 0 评论 -
改变控制台字体和背景颜色的简单方法
改变整个控制台的颜色用API system("color 0A"); 其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下: 0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色原创 2012-06-20 13:36:54 · 2603 阅读 · 0 评论 -
debug错误码解析
0xcdcdcdcd - Created but not initialised 0xdddddddd - Deleted 0xfeeefeee - Freed memory set by NT's heap manager 0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ 0翻译 2012-04-21 13:27:18 · 1248 阅读 · 0 评论 -
C++经典书籍推荐,附详细介绍
C++是一门广泛用于工业软件研发的大型语言。它自身的复杂性和解决现实问题的能力,使其极具学术研究价值和工业价值。和C语言一样,C++已经在许多重要的领域大获成功。 然而,一个不可否认的现实是,在低阶程序设计领域,C++挤压着C同时也在承受着C的强烈反弹,而在高阶程序设计领域,Java和C#正在不断蚕食着C+ +的地盘。也许C++与C合为一体永远都是一个梦想,也许Java和C#转载 2012-02-13 00:01:24 · 2772 阅读 · 0 评论 -
c++ const成员函数
一些成员函数改变对象,一些成员函数不改变对象。例如: int Point::GetY(){ return yVal;} 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象: void Point:: SetPt (int x, int y){ xVal=x; yVal=y;} 为了使成员函数的意义更加清楚,我们可在不改变对转载 2012-06-03 01:34:45 · 745 阅读 · 0 评论 -
在共享DLL中使用MFC 和在静态库中使用MFC区别
使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义。第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。第三种是将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的原创 2011-04-11 10:45:00 · 25629 阅读 · 4 评论 -
WindowProc和DefWindowProc的区别
1.WindowProc是你给自己的窗口定义的窗口处理函数DefWindowProc是windows平台提供的默认窗口处理函数如果某些消息你不需要做特别的处理,调用DefWindowProc进行处理就可以了,不需要你自己再去些那些windows的"标准动作"2.根据1,显然,你只能定义WindowProc而不能定义DefWindowProc看看MFC的CWnd源码就原创 2011-04-02 17:57:00 · 13751 阅读 · 1 评论 -
仿函数与回调函数
在之前聊了小括号重载和回调函数,现在来聊聊仿函数,以及它和回调函数的关系。 仿函数是对象使用行为看上去像个函数。 函数的使用是这个样的 Function(param1,param2,...) 而对象的使用是这个样的 Object.memberfunction(param1,param2...) 而仿函数对象的使用是这个样的 Ob转载 2012-06-10 23:48:34 · 1685 阅读 · 0 评论 -
如何生成一个32位的随机数
CStringA CreateHex(int max){ CStringA precision; precision.Format("%x",max); int size = precision.GetLength(); int num_align = size%4; // 按多少位对齐 if(num_align <=4) num_align = 4; else if (原创 2012-07-04 01:28:47 · 10636 阅读 · 0 评论 -
类中静态容器对象如何初始化
#include #include #include using namespace std; class CTest { private: static set m_set; static map m_map;public: static void print() { for(set::iterator原创 2012-09-13 21:57:55 · 4398 阅读 · 0 评论 -
关于C++中的前置声明
// ForwardDeclaration.h#include using namespace std;class B; // 这是前置声明(Forward declaration)class A{private: B* b;public: A(B* b):b(b) { }原创 2012-09-13 22:08:47 · 734 阅读 · 0 评论 -
linux下安装google protobuf(详细)
说明: protobuf已经全面迁移到github,地址:https://github.com/google/protobuf 直接下载2.6.1版本:https://github.com/google/protobuf/archive/v2.6.1.zip我转linux不久所以对linux的各种系统路径不是特别熟悉,网上看了几个教程都没有提到 添加 LIBRARY_PATH路径,导致自...原创 2015-08-10 11:55:13 · 102053 阅读 · 25 评论 -
C++11 语法特性
一、Lambda表达式C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda的语法形式如下: [函数对象参数] (操作符重载函数参数) mutable或exception声明 ->返回值类型 {函数体} 可以看到,Lambda主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、muta转载 2015-03-20 10:09:23 · 830 阅读 · 0 评论 -
结构化异常处理SEH之__finally终止处理
结构化异常处理(Structuredexception handling)简称SEH。是windows系统提供的异常处理机制。促使windows将SEH加入到windows系统的一个关键原因就是:它可以简化操作系统本身的开发工作,同时还让系统更加健壮。我们当然也可以在我们的程序中添加SEH机制,这样我们的应用程序也可以变得更加健壮。使用SEH,我们在编写代码时可以先集中精力完成软件的正常工作流转载 2013-11-22 01:18:27 · 1392 阅读 · 0 评论 -
C++ 函数映射使用讲解
// 使用map 映射 int operator[] (int key) { map<type_func,ptr_func>::iterator it = s_map.find((type_func)key); if (it != s_map.end()) { ptr_func pFun = it->second; if (pFun) return (this->*pFun)(false); } return NULL; } // 使用数组 映射 int op原创 2013-07-20 12:16:38 · 11350 阅读 · 2 评论 -
显式调用构造函数和析构函数
STL源码中有用到显示调用析构函数。试一了一下。果然能行。#include iostream>usingnamespace std;class MyClass{public:MyClass(){cout "Constructors" endl;}~MyClass(){cout "Destructors" endl;}};转载 2013-07-15 19:38:17 · 1384 阅读 · 0 评论 -
more effective c++笔记2-----Item M8:理 解各种不同含义的new和delete
一.说在前面的话1.new operator:new 是一个操作符2.operator new:new 操作符在进行内存分配时所调用的函数,通过这个函数来最终完成内存的分配,函数operator new 通常这样声明:void * operator new(size_t size),注意返回的是一个void*类型,但这个函数与普通函数又有些区别,他是一个重载操作符函数,类似于 bool原创 2012-12-05 04:02:41 · 1440 阅读 · 0 评论 -
C++ 虚函数表解析
前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不转载 2013-02-26 02:27:34 · 781 阅读 · 0 评论 -
时间的函数,sleep,clock,gettickcount,QueryPerformanceCounter
介绍 我 们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执行一个特定的操作,比如在多媒体中,比如在游戏中等,都 会用到时间函数。还比如我们通过记录函数或者算法开始和截至的时间,然后利用两者之差得出函数或者算法的运行时间。编译器和操作系统为我们提供了很多时间 函数,这些时间函数的精度也是各不相同的,所以,如果我们想得到准确的结果,必须使用合转载 2013-04-20 16:26:50 · 1228 阅读 · 0 评论 -
STL算法之—————remove_if, remove, remove_copy_if
最近有用到STL 的泛型算法remove_if,反复看了MSDN好几遍,硬是没理解这个函数的真正含义,好吧,其实我的英语老师是教体育的 - -! 后来看了STL源码,算是发现其中的奥秘了,这里写个笔记算是给自己加深一点印象吧,下面我任然使用MSDN的范例做说明。int greater6 ( int value ) { return value >6;}int _tmain原创 2013-03-30 06:50:11 · 4407 阅读 · 0 评论 -
C++ 的内部连接(internal linkage)和外部连接(external linkage) 2--- 总结
当一个实现文件(.cpp ...)编译时,预处理器(CPP)首先递归的包含头文件,形成一个保含有所有必要信息的单个源文件. 这个源文件称为 编译单元.内部连接 如果一个名称对于它的编译单元来说是局部的, 并且在连接的时候不可能与其它编译单元中的同样的名称相冲突,则这个名称具有内部连接.即具有内部连接的名称不会被带到目标文件中.外部连接 在一个多文件程序中,如果一个名称在连接时可以和转载 2013-01-10 21:29:03 · 6638 阅读 · 1 评论 -
C++ 的内部连接(internal linkage)和外部连接(external linkage) 1--- 细节
1.声明 一个声明将一个名称引入一个作用域; 在c++中,在一个作用域中重复一个声明是合法的 以下都是声明: int foo(int,int); //函数前置声明 typedef int Int; //typedef 声明 class bar; //类前置声明 extern int g_var转载 2013-01-09 21:19:35 · 14159 阅读 · 1 评论 -
自定义类型的思考
最近在群里面看到这样一个语句:typedef typename T::value_type _type; 我的第一反应认为这是一个自定义类型,后来查了下资料并实际动手写了几个例子也证实了我的想法,但这和我们平常见到的自定义类型又有不同,特别是T::value_type 这块会让大多数人很不解。其实他的意义就是:这个T必须含有value_type这个成员,也就是说T必须是个类或者命名空间,如果还不明原创 2012-08-27 03:32:05 · 3383 阅读 · 8 评论 -
more effective c++笔记1-----Item M2:尽 量使用C++风格的类型转换
1.一些重要的性质 //1. dynamic_cast 转换的两个类 需要有虚函数 //2. dynamic_cast 如果转换的是两个实例指针,转换失败返回的是NULL空 CWeget *pBase = new CWeget; CChildWeget *pChild = new CChildWeget; CWeget *ptrBase = dynamic_cast(pChild);原创 2012-12-01 21:53:58 · 927 阅读 · 0 评论 -
C++操作符重载手册
一、重载规则I.可以重载的操作符+-*/%^&|~!=>+=-=*=/=%=^=&=|=>>>>===!=>=&&||++--->*,->[]()operator new原创 2012-05-26 17:13:43 · 1525 阅读 · 3 评论 -
异常处理与MiniDump详解(4) MiniDump
一、 综述总算讲到MiniDump了。Dump有多有用我都无法尽数,基本上属于定位错误修复BUG的倚天剑。(日志可以算是屠龙刀)这些都是对于那些不是必出的BUG,放在外面运行的时候出现的BUG而言的,那些能够通过简单调试就能发现的BUG,一般都不足为惧。 二、 基本应用MiniDump之所以叫MiniDump,自然是有其Mini之处。。。(废话),呵呵,MS提供了一个A转载 2012-11-30 02:51:21 · 2551 阅读 · 0 评论 -
Visual Leak Detector(vld)无法显示内存泄露文件名与行号
需要注意的是,由于该软件是个开源的工具,并不是成熟的商业产品,所以易用性并不是很好,有一些小问题,还是需要我们自己来动手解决的。以下是我遇到的问题和解决方法:1、F5 运行程序后,提示"无法定位程序输入点 ???? 于动态链接库 dbghelp.dll 上" 解决方法:查看[输出]窗口,看看加载的是哪个目录下的 dbghelp.dll 。 如原创 2012-11-25 03:33:56 · 12906 阅读 · 8 评论 -
vld(Visual Leak Detector) 处理机制与使用详解
灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题。当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题。内存泄漏是最常见的内存问题之一。内存泄漏如果不是很严重,在短时间内对程序不会有太大的影响,这也使得内存泄漏问题有很强的隐蔽性,不容易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的,从性能下降到内存耗尽,甚至会影响到其他程序的正常转载 2012-11-25 03:26:55 · 2929 阅读 · 1 评论 -
string , CString , char* 比较
(一) 概述 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中; CString(typedef CStringT > CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unic原创 2012-04-20 09:25:58 · 933 阅读 · 0 评论 -
C++ 字符串操作函数集合(部分)
String Manipulation (CRT)String manipulation routines operate onnull-terminated single-byte character and wide-character strings. Use thebuffer-manipulation routines, described in Buffer Manipulatio原创 2012-02-03 19:17:45 · 1670 阅读 · 0 评论 -
c/c++ 控制台光标的相关操作
——————— 【 转载请保留 】 ———————作者:Defanive博客:Console.Dec.Cn(Hi.Baidu.Com/Console_App)——————— 【 谢谢合作 】 ———————类型:原创时间:09.03.21测试环境:VC++ 6.0命令行的光标(ConsoleCursor)其实就是一个另类的插入符(Care转载 2012-04-19 00:50:03 · 17946 阅读 · 0 评论 -
MultiByteToWideChar和WideCharToMultiByte用法详解
第一个就是宽字符到多字节字符转换函数,函数原型如下: int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cbMultiByte, LPCSTR lpDefaultChar,转载 2011-12-10 00:24:58 · 1300 阅读 · 0 评论 -
Effective c++ 学习笔记——条款04:确定对象被使用前已先被初始化
Make sure that objects are initialized before they're used. 昨天就已经把第四条款看完了,初始化这篇内容非常非常丰富,讲解了很多,也让我的一些疑惑解开了。由于经常加班,写作时间比较少,我今天看写完这篇文章,还要转载 2011-09-12 11:39:40 · 686 阅读 · 0 评论