
编程基础
langresser
这个作者很懒,什么都没留下…
展开
-
cmake并没有想象中好用
简单说,CMake可以自动生成各个平台的build(make)文件,从而达到编写一份build脚本就可以自动在各平台生成独自的工程文件。 这似乎听起来很好,但是实际使用中会有各种恶心的问题。导致有的时候我宁愿自己重新搭建工程文件也不想用cmake。1、首先你要熟悉cmake才能知道为什么它没有成功的生成工程文件,单单一个xxx not found是无法帮助我们解决问题的。但是大多数时原创 2012-08-26 15:35:38 · 3026 阅读 · 1 评论 -
代码的脾气
在别人的一个博客里看到的,太生动了。代码,尤其是开源的东西看多了,越发感觉到所谓编程语言,真的是一门语言,代码的脾气也体现了程序员的性格。代码是有脾气的,我以为。有的代码蛮横,不把你自己的程序大卸八块是容不下它的;有的代码随和,很容易就集成到自己的程序中了。有的代码罗嗦,和它打交道要不断的互相传递很多信息;有的代码收敛,暴露给你的不多,但都是精华。有的代码狡猾,自以为聪明的帮你接管了很原创 2013-01-12 22:52:28 · 1830 阅读 · 0 评论 -
讨论nullptr和NULL
最近玩了两天的c++11,其中有一个是新的关键字nullptr。 这里讨论下nullptr的存在价值,应用场景以及不支持c++11的时候如何模拟nullptr。1、为什要有nullptr 我们给一个指针赋初值的时候一般这么写 FILE* fp = NULL; 这里有个NULL的定义,一般情况下它是这么定义的: #ifdef __cplusp原创 2013-02-20 14:31:00 · 18481 阅读 · 1 评论 -
不要在使用了预编译头文件的项目的“头文件”中使用Lambda表达式
不要在使用了预编译头文件的项目的“头文件”中使用Lambda表达式,否则可能出现错误,error C2872: 'lambda0>' : ambiguous symbol 1预编译头文件中包含的头文件中,可以使用其他方式替代Lambda。参见:http://connect.microsoft.com/VisualStudio/feedback/details/535850/la原创 2013-03-06 13:43:44 · 2893 阅读 · 0 评论 -
windows下如何检测文件名大小写不匹配
iOS和android(还有linux)都是文件名大小写敏感的,windows是大小写不敏感的。 这样游戏开发的时候就会出现这样的问题,windows下测试正常的游戏(包括mac下的iOS模拟器运行正常的游戏,因为Mac系统也是文件名大小写不敏感的),放到实际设备上运行可能各种崩溃。其中十有八九是配置文件名和实际文件名不匹配造成的。 解决方法有:原创 2013-03-07 14:15:10 · 5566 阅读 · 2 评论 -
工作bug现场回放 (CFURLCreateStringByAddingPercentEscapes和vector)
1、之前博客中提到了崩溃收集系统。给服务器发送消息是一个http post的过程,其中会接收一个二进制数据流,这个可以是文本,也可以是一个zip文件流。与服务器进行约定,这个参数会先进行base64编码,这就意味着不会出现中文兼容等问题。 但是,ios上面有一个bug,传输的文本数据会在某些字符后错乱掉。如果传zip包,zip数据流会被破坏掉,文件无法正常打开(但是zip文件压缩是没有问题的,本原创 2013-02-24 01:24:00 · 2006 阅读 · 0 评论 -
一个基础但是隐晦的c++语法问题
1、工作现场代码:typedef MyData{ int data1; int data2;} * LPMYDATA;const LPMYDATA pData = getData();// do sth elsepData = getNewData(); // compile error2、分析: a、首先我们应该都知道const的使用方法,一些面原创 2013-02-25 13:12:45 · 1925 阅读 · 3 评论 -
windows下使用minidump获取和调试崩溃信息
非常简单和实用的功能,先上代码1、使用minidump获取和打印崩溃信息#include #include #pragma comment(lib, "DbgHelp.lib")void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException) { // 创建Dump文件原创 2013-02-27 21:14:07 · 5921 阅读 · 1 评论 -
c++写的通用计时器工具
先上代码,本身没有任何高科技的东西,不过很好用和方便。#pragma once#include "CommandQueue.h"#include "GlobalFunction.h"//// 计时器回调函数.//typedef function TimerCallback;class Timer{public: Timer(int timerId, int ms, b原创 2013-03-03 23:38:58 · 2616 阅读 · 0 评论 -
去除VS2010对汉字的拼写检查后留下的红色波浪线
用中文进行注释,浏览代码的时候就大片的红线看着不舒服 原因是VA搞的鬼。在VAssistX菜单栏->Visual Assist X Options->展开Advanced->Underlines->把underlines spelling errors in comments and strings using的勾去掉就行了原创 2013-06-03 17:55:57 · 3269 阅读 · 0 评论 -
其实可以不用那么c++
所谓编程语言本质也是一门语言,目的是表达自己的思想,虽然目标是机器而不是人,但是相信我,会真正看语言本身的终究还是人。所谓优雅的代码就是严谨的表达出自己的思想,并且易于维护的。如果你写一篇文章满是之乎者也,但是别人都不懂,那么即便你知道“茴”字的六种写法又如何?会有人觉得你是国学大师吗?在我看来代码易于理解比什么都重要,只有代码容易理解了,之后维护和改bug也才容易,后期他人维护起来也不会捅什么娄原创 2013-09-30 22:18:16 · 1961 阅读 · 1 评论 -
如何用CodeSmith减少代码重复编写
如果说代码生成工具仅仅是自动生成for循环代码或者是include头文件,或者是类定义,那么它对我而言还没有太大的意义,因为我平时工作也达不到“手指在键盘上飞舞”的状态。思考的时间远大于写代码的时间。我不会感到写个for循环会影响到我的工作效率。但是看了下面的文章,我感到这种代码生成工具还是非常有意义的。我之前看到服务端的同事写个状态过程写的异常辛苦,而且中间各种问题(例如写了一半编辑器崩溃了,之转载 2013-02-11 22:14:16 · 1808 阅读 · 0 评论 -
走进c++0x,体验不一样的c++
好吧,之前我错误的认为c++0x就是添加了一些大多数人不懂的语法,比如bind,lambda,或者是一些使用起来可有可无的特性,比如auto,或者是可以通过具体代码方式来避免的,比如move。 不过阅读了漫话c++0x系列文章,我发现c++0x真的是一门新的语言,并且是足够漂亮的新语言。说实话,我们平时写代码确实不会遇到什么复杂的语法(如果自己写了自以为很炫,但是别人都看不懂的语原创 2013-02-11 20:43:38 · 2163 阅读 · 2 评论 -
boost在实际项目中的使用
对于boost在实际项目中的使用应该有一个相对客观的态度,既不能过分使用,在项目中铺满boost,又不能对其畏之如虎,不敢使用。我想实际游戏开发中,我们的团队伙伴大多应该是跟我一样程度的----对c++有一定的了解,又绝对成不上专家。所以,我们使用boost应该有下面这些原则或者说是注意事项:1、不要认为boost非常庞大就一概否定,认为游戏客户端里面绝对不能或者完全没有必要加boost。原创 2013-02-03 16:05:57 · 5946 阅读 · 0 评论 -
python正则表达式惯用法
并不是一定要写的像密码一样才是高级用法,一些平常不会注意到的惯用法会大大提高我们的代码可读性。记录python的正则表达式常用方法,备忘。1、最主要的捕获(match)方法 match = re.search('#include\s*\"(?P.+.h)\".*', line); 解释:(?Pexp)这个可以捕获exp表达式,如果有指定name,那么就可以使用mat原创 2012-12-05 12:49:03 · 985 阅读 · 0 评论 -
android ndk提高编译速度
1、开启多核编译: ndk-build -j4 -j4就是指定4核编译,如果cpu是8核那可以指定-j8,通过指定这个,编译速度提高4倍原创 2012-12-05 16:32:19 · 5291 阅读 · 0 评论 -
Android NDK R8C 重新编译jni问题
前几天google升级了Android ndk 到r8c,这个版本修复了上版本的错误,比较扯淡的错误。不过这次更新的童鞋可以发现,每次ndk-build会重新编译所有的,管你改没改过代码。总之building ,everything,操蛋啊。[cpp] view plaincopy打开NDK的根目录 找到 build/core转载 2012-12-05 16:17:41 · 4779 阅读 · 5 评论 -
iOS和Android设备上最高效的xml解析库
好吧,其实真正最高效的xml使用方式是不使用xml,使用json或者是ini或者是自定义格式都要比xml快很多。如果使用xml格式的话,可以考虑对xml进行二进制压缩,即把xml当做内存数据直接读到结构体里面。(参考ogre cocosbuilder的实现)不过这样就需要xml与程序严格匹配。原始xml解析库的话,rapidxml是最快的。 我测试了cocs2d-x使用的libxml2(原创 2012-12-11 17:53:35 · 3303 阅读 · 0 评论 -
do...while(0)的用处
char* buffer = NULL;do { buffer = createBuffer(); if (!buffer) { break; } if (buffer[0] == 0) { break; } // do sth else} while (0);delete[] buffer;buffer原创 2012-12-15 00:15:00 · 1240 阅读 · 1 评论 -
静态代码检查工具的使用(cppcheck)
所谓静态代码检查就是使用一个工具检查我们写的代码是否安全和健壮,是否有隐藏的问题。比如无意间写了这样的代码:int n = 10;char* buffer = new char[n];buffer[n] = 0;这完全是符合语法规范的,但是静态代码检查工具会提示此处会溢出。也就是说,它是一个更加严格的编译器。使用比较广泛的静态代码检查工具有cppcheck原创 2012-12-20 15:16:49 · 4001 阅读 · 0 评论 -
真正快速的std::vector遍历方法
看到篇文章,内容很基础,但是反应的问题是值得思考的。遍历vector的标准方法是什么?之前按照书中的理论,认为stl标准的迭代器或者stl的for_each算法应该是最快的。但是如果不经过实际程序的检验,那么理论永远是理论。实践表明operator[]的访问速度是最快的(至少不比迭代器更慢)。之前我洁癖性的把所有使用operator[]进行vector遍历的地方都改成迭代器,认为这样更高效,看来是转载 2013-01-05 12:35:52 · 13336 阅读 · 2 评论 -
资源内存管理
网络游戏的 client 开发中,很重要的一块就是资源管理。游戏引擎的好坏在此高下立现。这方面我做过许多研究和一些尝试。近年写的 blog 中,已有两篇关于这个话题的:基于垃圾回收的资源管理、动态加载资源 。最近在重构引擎,再次考虑这一个模块的设计时,又有了一些不算新的想法。今天写了一天程序,一半时间在考虑接口的设计,头文件改了又改。最终决定把想到的东西在这里写出来,算是对自己思考过程的一个梳转载 2013-01-12 19:28:41 · 1841 阅读 · 0 评论 -
c++高效委托的实现(fast delegate---简单、高效、跨平台)
概要很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(delegates), 在类似的语言中已经体现出了它的价值. 在 Delphi(Object Pascal) 中, 他们是 VCL (Borland's Visual Component Library, 宝蓝可视化组件) 的基础. 最近的 C# 让委托的概念更为流行, 这转载 2013-01-09 09:44:01 · 3977 阅读 · 0 评论 -
Fast C++ Delegate: Boost.Function 'drop-in' replacement and multicast
注意,使用最新的boost需要进行修改:Just replace boost::ct_if with boost::mpl::if_c (and #include ) in Jae's Fast Delegate code.IntroductionThere have been several C++ delegates which declared themselves as a '翻译 2013-01-09 14:34:32 · 6429 阅读 · 0 评论 -
android ndk使用gcc4.7 toolchain编译项目
项目引入了一些cocos2d-x 3.0的代码,大量使用c++11的新特性。这些在gcc4.6是不完全支持的,但是gcc4.7绝大部分已经支持。设置toolchain的方法是在Application.mk中设置:NDK_TOOLCHAIN_VERSION = 4.7为了确认是否设置成功,在ndk-build调用时增加参数V=1。即 ndk-build v=1 ..其他参数.原创 2013-10-15 18:29:13 · 2737 阅读 · 0 评论