C/C++
艾蔓草
那一晚,我的船推出了河心,澄蓝的天上托着密密的星。
展开
-
C语言inline函数的使用方法
大学在教科书上学习过inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。工作后项目中也很少用到inline来定义函数,近几天在研读google的google c++ style guide,发现之前自己对inline函数的认识太过肤浅了,这里学习总结一下。 1、inline函数不要超过10行代码,且不能包含循环、switch、if语句转载 2014-01-03 12:45:06 · 6821 阅读 · 0 评论 -
反转一个字节 和 判断32位整数二进制中1的个数 的算法
好像有一个是微软的面试题unsigned char reverse8( unsigned char c ){ c = ( c & 0x55 ) > 1; c = ( c & 0x33 ) > 2; c = ( c & 0x0F ) > 4; return c;}unsigned long func(unsigned long x)转载 2012-07-23 11:42:15 · 1295 阅读 · 0 评论 -
C++随记总结(1)----关于C++中的大小端、位段(惑位域)和内存对齐
原文链接:http://www.cnblogs.com/leezhm/archive/2011/07/19/2110864.html 听到好几个朋友说到去一些公司做面试,总是遇到关于大小端、位段(或者叫位域)和内存对齐的考题,然后就不知所措了。虽然我认为很多开发根本就用不到这个,但是我认为很有必要学习理解这些知识点,因为它可以让你更了解C++的,了解程序在内存的运行情况,也能转载 2012-05-11 14:33:29 · 2423 阅读 · 0 评论 -
Debug和Release区别
VC下Debug和Release区别最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常。网上查找了些资料,在这 罗列汇总下,做为备忘~一、Debug 和 Release 的区别 Debug转载 2012-03-20 17:28:18 · 1063 阅读 · 0 评论 -
VC内存分配:GlobalAlloc、new、malloc、HeapAlloc
VC编程精粹需要进行内存的动态分配和释放操作,本文总结常用的VC对内存的操作方法并比较他们之间的区别,以便于读者能够加深对他们的理解并根据项目的实际情况选用适合自己的方案。用法总结:1、GlobalAlloc()The GlobalAlloc function allocates the specified number of bytes from the heap. Wi转载 2012-03-19 15:10:23 · 6164 阅读 · 0 评论 -
Windows内存管理 - 隐藏在new和malloc背后的heap
先来说,heap是什么,heap就是堆,在不知道具体细节的时候,我们只知道,通过new和malloc,我们可以动态获得一个内存区域,用来存放自己的对象和变量,而这些内存区域都是在heap上的。heap应该就是一个内存区域吧。应该会有很多人这么认为过。 后来,学习了Windows的内存模型和内存管理机制,知道了地址空间,明白了Windows(32bit)给每个进程一个假象,就好像是进程拥有转载 2012-03-19 14:54:55 · 2150 阅读 · 0 评论 -
解决“User breakpoint called from code at XXXX”Bug
转至:VC知识库hyj的Blog(除虫记之十二:费解的NTDLL断点),有改动。 很久没有写东西了,这次是为了完善很久很久以前写的一个培训ppt(VC的使用与调试技巧),才想起来写点东西的。 下面的文章参考了http://www.debuginfo.com/tips/userbpntdll.html,但不是翻译,偶英语太烂了。我们在调试程序的过程中,有时会突然的转载 2012-03-14 10:53:57 · 1674 阅读 · 0 评论 -
vc - dumpbin命令不好使的解决办法
在vc中为了查看自已编写的动态链接库的输出函数的名字时,需要使用dumpbin命令,些时不好使的解决办法.问题:在命令窗口中输入dumpbin命令回车,提示'dumpbin'不是内部或外部命令,也不是可运行的程序或批处理文件. 请问如何解决?答案:找到VC的安装目录:如:"C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS3转载 2012-03-09 14:44:09 · 5307 阅读 · 0 评论 -
代码说话:整数位操作比除法/取余慢多少?
#include #include #include #include #include using namespace std;#define TIMES 100000000time_t getms(){ timeb tb; ftime(&tb); return (int)(tb.time*1000 + tb.mi转载 2012-01-05 17:17:48 · 2041 阅读 · 0 评论 -
C代码优化方案
目录C代码优化方案1、选择合适的算法和数据结构2、使用尽量小的数据类型3、减少运算的强度(1)、查表(游戏程序员必修课)(2)、求余运算(3)、平方运算(4)、用移位实现乘除法运算(5)、避免不必要的整数除法(6)、使用增量和减量操作符(7)、使用复合赋值表达式(8)、提取公共的子表达式4、结构转载 2012-01-05 17:29:40 · 1148 阅读 · 0 评论 -
DLL中用malloc分配了一块内存,但是在exe程序中释放引发的错误可能原因
写了个程序,在DLL中用malloc分配了一块内存,但是在exe程序中释放,结果程序crash,原因就是:其原因可能是堆被损坏,这也说明 TestMySticker.exe 中或它所加载的任何 DLL 中有 bug。想了半天以为是自己的写法有问题,后终于在google上找到了原因,汗。。。以下文字引用自 http://hi.baidu.com/huhe/blog/item/0b42转载 2011-12-22 17:12:29 · 2346 阅读 · 0 评论 -
在不同模块分配和释放内存时出错的原因
问题:如果程序的模块中有一个链接到静态C/C++运行期库,那么在这个模块中分配内存而在另一个模块中释放这块内存将失败。原因:造成失败的原因是分配和释放内存不是由相同的堆管理程序完成的,例如动态链接库中的堆在默认情况下是由msvcrt.dll中的堆管理程序管理的(以动态链接的方式),而exe程序的堆在默认情况下是由程序自己的代码管理(以静态链接的方式),由于它们的堆管理程序不同,当动态链转载 2011-12-22 17:11:38 · 1662 阅读 · 0 评论 -
LIB和DLL的区别与使用
共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。共有两种链接方式:动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅转载 2011-12-22 15:02:24 · 1016 阅读 · 0 评论 -
基于MATLAB2008B与VS 2003生成独立可执行的程序
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:一、生成独立可执行的程序(exe文件)步骤1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装转载 2011-11-10 14:28:02 · 1174 阅读 · 0 评论 -
一种简单,快速,精准的sin/cos函数模拟,及as3实现
在某些情况下我们需要一些更高效的且近似于标准值的 sin 和cos函数。有时候我们并需要过高的精度,这时 C语言中自带的三角函数(sinf() 和 cosf() f)计算的精度超出了我们所需要的精度要求,所以其效率很低。我们真正需要的是间于精度和效率的一个折中的方案。众所周知的取近似值的方法是:泰勒级数(和著名的马克劳林级数)代码是:x - 1/6 x^3 + 1/120转载 2011-11-24 14:07:01 · 5524 阅读 · 0 评论 -
VC内存泄露检查工具Visual Leak Detector介绍
初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题。当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题。内存泄漏是最常见的内存问题之一。内存泄漏如果不是很严重,在短时间内对程序不会有太大的影响,这也使得内存泄漏问题有很强的隐蔽性,不容易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,转载 2011-11-15 19:13:17 · 1112 阅读 · 0 评论 -
根据大端模式或小端模式取得数据方法
/**@1 在各种体系的计算机中通常采用的字节存储机制主要有两种:* big-endian和little-endian,即大端模式和小端模式*@2 MSB:Most Significant Bit ------- 最高有效位* LSB:Least Significant Bit ------- 最低有效位*转载 2012-07-24 14:35:04 · 3433 阅读 · 0 评论 -
利用AlphaBlend实现高斯模糊
原文:http://simplesource.blog.163.com/blog/static/1034140620113284223430/ 高斯模糊就是把一个点与其周围的点进行相加然后平均,但是图像中的每个点都需要进行计算,所以计算量比较大,而且取像素设置像素的代码写起来也比较繁琐。今天我突然想到AlphaBlend其实就是整幅图像的像素与像素的相加操作,那么是不是可以用若转载 2012-08-02 11:00:32 · 1899 阅读 · 0 评论 -
C语言宏中"#"和"##"的用法
#include#includeusing namespace std;#define STR(s) #s#define CONS(a,b) int(a##e##b)int main(){ printf(STR(vck)); // 输出字符串"vck" printf("%d\n", CONS(2,3)); // 2e3 输出:转载 2013-07-02 17:47:27 · 1834 阅读 · 0 评论 -
VS2010彻底卸载
依照微软网站http://msdn.microsoft.com/zh-tw/library/e2h7fzkw.aspx,完整移除方法有两种:方法一:工具卸载下载Microsoft Visual Studio 2010 Uninstall Utility来移除,默认情况下,这将删除 Visual Studio 和支持组件,但不会删除与计算机上的其他应用程序共享的组件。若还要删除共享的组件,则原创 2013-05-30 10:04:22 · 206353 阅读 · 9 评论 -
VC6在Win7下使用显示行号的插件
首先下载VC6LineNumberAddin,点击下载。然后按下面的步骤就可以了:1. 如果你的VC安装在C盘,请拷贝文件VC6LineNumberAddin.dll到如下目录:C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\AddIns2. 注册双击VC6LineNumberAddin_X64.reg原创 2012-12-06 17:50:09 · 6245 阅读 · 3 评论 -
vc6.0 radio控件分组及消息映射
一、Radio分组多组和一组是一样的使用,只要搞清楚哪个是哪一组的就行了。为对话框添加四个Radio:Radio1,Radio2,Radio3和Radio4。首先在对话框资源面板上按Ctrl+D,按你自己的理想顺序用鼠标逐个点击为这些Radio Button排个顺序,就是排列他们的TAB ORDER。不妨假设Radio1、Radio2、Radio3、Radio4分别是1、2、3、4。R原创 2013-04-12 17:08:49 · 1770 阅读 · 0 评论 -
浅谈工作中使用过的几种C++界面库
通常一个界面库是否有广大的使用人群,我觉得与以下几个因素有关:支持的操作系统是否多样,支持的操作系统市场占有率是否大,使用是否方便,是否有良好的"所见即所得"(WYSIWYG)的开发工具支持,是否有经济实力的雄厚的大公司支持等等。结合我使用过的的几种C++界面库和大家交流一下。1.MFC(MicroSoft Foundation classes):相信在windows下进行开发的各位同转载 2013-03-22 13:49:16 · 1626 阅读 · 0 评论 -
cppcheck的简单介绍
一. cppcheck介绍 cppcheck 是一个静态代码检查工具,支持c, c++ 代码;作为编译器的一种补充检查,cppcheck对产品的源代码执行严格的逻辑检查。 执行的检查包括: 1. 自动变量检查 2. 数组的边界检查 3. class类检查 4. 过期的函数,废弃函数调用检查 5. 异常内存使用,释放检查 6. 内存转载 2013-04-02 21:03:16 · 2340 阅读 · 0 评论 -
C语言实现字符串中查找字符串
查找字符串函数实现://find string in string, return the first start location or -1 if can not findint StringFind(const char *pSrc, const char *pDst){ int i, j; for (i=0; pSrc[i]!='\0'; i++) { if(pSrc[i]!原创 2013-01-15 16:14:24 · 38247 阅读 · 1 评论 -
C 语言中操作字符串的一些函数源代码(对比版)
从网上找到的一些字符串函数源码,对比如下: 1. strlen(),计算字符串长度int strlen (const char *s){ const char *p; for (p = s; *p; ++p); return p - s;}int strlen(const char *string){ int i=0; while(string[i])原创 2013-01-15 16:00:10 · 2723 阅读 · 0 评论 -
Cygwin 下载安装
我们可以到Cygwin的官方网站下载Cygwin的安装程序,地址是: http://www.cygwin.com/或者直接使用下载连接来下载安装程序,下载连接是: http://www.cygwin.com/setup.exe下载完成后,运行setup.exe程序,出现安装画面。直接点“下一步”,出现安装模式的对话框,如下图所示:我们看到有三种安装模式:转载 2012-12-29 21:06:34 · 4145 阅读 · 0 评论 -
C语言实现md5函数代码
网上找到的实现md5函数代码,包括一个头文件md5.h和一个源文件md5.c,用下面的测试代码test.c测试通过,各文件依次如下:头文件md5.h#ifndef MD5_H#define MD5_H typedef struct{ unsigned int count[2]; unsigned int state[4]; unsigned char原创 2012-12-29 15:39:29 · 72594 阅读 · 10 评论 -
修改PuTTY实现保存密码自动登录
一直钟情于PuTTY的小巧精悍,是我SSH连接之必选。虽然喜欢这款软件的小巧,但亦要承受其不方便之苦。最希望PuTTY添加的两个功能是自动登录和Tab支持。这也是众多使用者的wishlist,但官方已明确的断了大家的念想。关于自动登录(auto-login password),当然需要保存密码的功能,官方的回应是记住密码会带来显著的安全问题:任何能使用你的设备的人都能轻而易举的得到你的密码,使转载 2012-12-29 15:27:21 · 3964 阅读 · 0 评论 -
MinGW安装和使用
MinGW全称Minimalist GNU For Windows,是个精简的Windows平台C/C++、ADA及Fortran编译器,相比Cygwin而言,体积要小很多,使用较为方便。MinGW提供了一套完整的开源编译工具集,以适合Windows平台应用开发,且不依赖任何第三方C运行时库。MinGW包括:一套集成编译器,包括C、C++、ADA语言和Fortran语言编译器用于生转载 2012-12-28 23:08:33 · 60857 阅读 · 1 评论 -
在线的编译器
一直以来都喜欢用手机看书,尤其是在上班时。看的最多的是编程一类的书,主要是C++,看着就想写写代码,可是电脑用不能用,怎么办?于是想到用UC浏览器找找看网上有没有在线的编译器,想什么时候写代码都可以验证。于是就找了几个,各有千秋吧。中文的我没找到,全是英文的,不过英文不难,其实也不需要懂英文,只要知道在什么地方写代码,然后点击按钮进行在线编译就行了。好了,下面看介绍: 1、http://c转载 2012-12-07 09:28:22 · 947 阅读 · 0 评论 -
cmake 简介
作者:孙晓明,华清远见嵌入式学院讲师。前言:cmake是kitware公司以及一些开源开发者在开发几个工具套件(VTK)的过程中所产生的衍生品。后来经过发展,最终形成体系,在2001年成为一个独立的开放源代码项目。其官方网站是www.cmake.org,可以通过访问官方网站来获得更多关于cmake的信息,而且目前官方的英文文档比以前有了很大的改进,可以作为实践中的参考手册。转载 2012-12-07 14:24:12 · 854 阅读 · 0 评论 -
Windows 7 X64位平台下,VC6调试运行程序,中断调试无法退出
用VC6在64位Windows7下调试的时候,如果中断(Shift+F5)调试,程序无法退出。问题描述:当点击F5开始一个项目的调试时,程序在设置的断点处停止,这时按下Shift+F5后,vc6可以退出调试状态,但是WINDOWS系统的任务栏上会留下前面调试时产生的进程图标。该进程不能被结束,即使使用任务管理器,也不可以。这时如果再次按下F5调试,并按下Shift+F5后,任务栏上会留下两原创 2012-12-06 14:41:07 · 8498 阅读 · 6 评论 -
CMake学习资料
收录的学习CMake的资料:CMake入门指南:http://sinojelly.blog.51cto.com/479153/319173;一起学习CMake – 01 :http://blog.163.com/jacky_ling0/blog/static/1373925712011072375418/;一起学习CMake – 02 :http://blog.原创 2012-12-07 14:35:30 · 1004 阅读 · 0 评论 -
判断点是否在三角形内
本文只是翻译和整理,原文在此http://www.blackpawn.com/texts/pointinpoly/default.html概述给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内。这是游戏设计中一个常见的问题。需要注意的是,这里假定点和三角形位于转载 2011-08-22 10:16:20 · 1066 阅读 · 0 评论 -
mainCRTStartup
操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。程序的默认入口点由连接程序设置, 不同的连接器选择的入口函数也不尽相同。在VC++下,连接器对控制台程序设置的入口函数是 mainCRTStartup,mainCRTStartup 再调用main 函数;对图形用户界面转载 2011-08-04 10:08:02 · 17138 阅读 · 0 评论 -
VC的MAKE文件的语法
<br /> 因为曾经在UNIX和Linux上工作过,也使用过GCC来编译过软件,记忆中在UNIX系列上开发是比较麻烦的,现在不知道情况怎么样了?那时候UNIX上是没有是没有类似于VC这样的图形界面的开发环境的,要想对要开发的软件进行编译,必须使用MAKEFILE来实现。<br /> 使用VC语言以后,人变得懒了,也不用在使用MAKEFILE来编译项目了.但实际上MAKE FILE在某些情况下还会憋使用的,至于在什么条件下使用,这也和开发者要实现的内容有关系.<br /> 那么什么是MA转载 2011-04-14 13:41:00 · 2150 阅读 · 0 评论 -
VC 开发辅助工具大收集
<br />摘自:http://www.epubcn.org/read.php?tid=18281<br />开发辅助工具大收集 <br /><br />除了我们日常开发使用的Visual C++、Delphi、JBuilder等等大家伙, <br />还有很多小巧好用的开发辅助工具,善用它们可以极大的提高我们的效率。 <br /><br />日常工作中我主要使用Visual C++开发程序,工作几年,收集了一些小工具, <br />下面逐个介绍给大家。也希望大家把自己的工具拿出来和大家分享。 <br />转载 2011-04-20 11:46:00 · 1484 阅读 · 0 评论 -
深入认识Turbo C编译器
转自:http://www.002pc.com/master/College/Language/VC/2010-04-23/13766.html 有谁真正的理解过一个编译器呢?许多人认为TC很简单很落后,但是即便是这样简单的工具,到底有几个人真正的深入理解了呢?一个简单的编译器都不能理解,如何能成为高手,如何能深入的使用更加高级的工具呢?不要以为自己使用的是VC就很了不起转载 2011-06-09 16:51:00 · 2053 阅读 · 0 评论 -
VC6.0中如何修改工程的名字
其实有一个比较简单的方法,不过需要的是仔细,我已经试过了是可行的,假如你的工程是AAA,想改为BBB,请按照一下步骤操作:<br />1 备份源工程,这样即便是失败也没关系.<br />2 删除工程对应的临时文件,AAA.ncb,AAA.opt,AAA.APS<br />3 用文本编辑工具,不如UltraEdit,打开AAA.dsp,搜索字符串AAA,确认该字符串是工程名相关,并替换为BBB,替换完后,保存退出,修改AAA.dsp为BBB.dsp.<br />4 用文本编辑工具打开,AAA.dsw,找到:<转载 2011-04-14 15:05:00 · 26008 阅读 · 3 评论