C++
文章平均质量分 56
开发者说
专注于Linux智能设备与云
展开
-
qml可以这么玩
Qt 5以后qmlscene被qml所替代,/usr/bin/qml可以用来执行.qml文件。所以,我们就可以和sh一样的来写界面了。#!/usr/bin/env qmlimport QtQuick 2.2Rectangle { width: 200 height: 100 Text { anchors.centerIn: parent原创 2014-07-03 20:58:56 · 4393 阅读 · 0 评论 -
搭建跨平台开发环境
一、主要工具编译器:GCC 4.6+(windows:mingw)或llvm+clang调试器:GDB源码组织:文件目录源码管理:cmake(makefile)格式化:astyle静态检查:cppcheck动态检测:valgrind(windows没有找到支持的版本,可以使用windbg代替吧,不过功能差很多)IDE:eclipse(QtCreator、codeli原创 2013-03-30 10:17:54 · 5709 阅读 · 1 评论 -
命令行选项的处理
对命令行的选项的处理有时是一个比较头疼的问题。首先需要从输入中识别出命令行选项来,通过选项的组合出需要调用的具体处理过程。在unix世界中命令行选项有共性,更是千差万别。如果手工去处理我们的方法一般会先进行分词,之后进行词法分析。这个过程的复杂度随着参数数量的增加而增加。 int main(int argc, char **argv) { return原创 2012-12-19 09:50:06 · 1654 阅读 · 0 评论 -
说说char续
上篇文章《说说char》对比了linux和windows上分别使用gcc和vc编译器的情况,如果都使用gcc编译器会怎样呢?gcc在window下内存:linux和windows上使用gcc和vc的QString又是怎么来实现的呢?linux平台:windows平台:linux和windows平台上QString实现都是sho原创 2012-11-06 12:22:40 · 1708 阅读 · 0 评论 -
说说char
char一直都在使用并且大量的使用,但是,大部分都是在单一平台上,那样没有太多的问题,在windows上大量直接使用wchar_t来解决中文的问题。并且在使用跨平台时也大多直接使用了Qt的QString来节省了很多的麻烦,但是现在项目中有不允许引入第三方库来处理字符串处理的问题,在linux直接使用char完全没有问题,而在windows上却成了乱码。为了解决这个问题,我研究了一下两个平台下cha原创 2012-11-05 23:15:46 · 2137 阅读 · 2 评论 -
C++11变参模板
变参模板是C++11中新的特性,它主要解决了原有模板参数数量不可变的问题。现在标准库的tuple实现就是基于变参模板来实现的。还是从C的变参函数来说吧,经典的就是printf了, 它基于可变参数void print(const char *fmt, ...){ va_list ls; va_start(fmt, ls); va_arg(ls, int);原创 2012-09-26 23:06:20 · 7325 阅读 · 2 评论 -
我的doxygen配置
# Doxyfile 1.7.5# This file describes the settings to be used by the documentation system# doxygen (www.doxygen.org) for a project## All text after a hash (#) is considered a comment and wil原创 2012-08-20 16:27:26 · 4488 阅读 · 0 评论 -
error LNK1123: 转换到 COFF 期间失败
原来机器上安装了VS2010非常正常,安装VS2012后,出现提示错误 13 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏,如图:出现的具体原因是微软的链接文件的格式变了(让人无语的微软)微软官方给出的具体解决方法是给VS2010打SP1补丁。下载地址是:http://www.microsoft.com/en-us/down原创 2012-08-20 10:08:53 · 6765 阅读 · 0 评论 -
OpenInventor开发环境配置
Open Inventor是SGI公司开发的基于OpenGL的面向对象三维图形软件开发包。使用OIV开发包,程序员可以快速、简洁地开发出各种类型的交互式三维图形软件。OIV具有平台无关性,它可以在Microsoft Windows、Unix、Linux等多种操作系统中使用。OIV允许使用C、C++、Java、DotNet多种编程语言进行程序开发。TGS Open Inventorh原创 2012-08-15 14:22:14 · 5261 阅读 · 1 评论 -
工作代码片段-cmake
顶层目录结构CMakeLists.txtproject(khfep)cmake_minimum_required(VERSION 2.6)set(PRO_DIR ${PROJECT_SOURCE_DIR}/../../)set(LIBRARY_OUTPUT_PATH ${PRO_DIR}/lib/fep)set(EXECUTABLE_OUTPUT_PATH ${PRO_DIR}/bin原创 2012-07-27 11:25:11 · 1556 阅读 · 0 评论 -
数据结构在实际开发过程中的应用
写了这么些年的代码,对数据结构和算法分析也只停留在皮毛阶段,实在是惭愧,把自己最近一段时间在项目中数据结构的具体应用总结一下。结构具体应用结构体用来表示某些纯数据结构会很好指针的指针做动态数组用效果不错,但是在初始化时也需要动态确定指针的容量一维数组用来保存一些配置信息列表不错二维数组做key:alue结构,虽原创 2012-05-21 17:16:52 · 9299 阅读 · 3 评论 -
不同的MVC
MVC的出现是很久很久以前的事情了,MVC本身有很多可以去说的地方,通过另一个视角去看MVC,MVC不属于GOF设计模式,但它确实设计模式应用的集合,且拥有很多的实现方式,如:MFC的Document/View/Control,Qt的Model/View/Delegate,IOS的View/Controller/Delegate,java EE的Model/View/Control。如此多的实原创 2012-05-17 14:12:02 · 2424 阅读 · 4 评论 -
使用oracle开发的配置
从oracle官网下载oracle的基础包 Instant Client for Microsoft Windows或者Instant Client for Linux,将其解压。设置ORACLE_HOME环境变量为解压目录,windows下将oracle的bin目录添加到PATH变量中,并将oci.dll复制到系统搜索目录中或者添加这个目录到PATH中,linux下将oracle的lib原创 2013-04-27 20:55:47 · 1360 阅读 · 0 评论 -
Qt Installer Framework实战
Qt Installer Framework是Qt发布的安装程序支持框架,只需要简单的配置就可以生成安装文件,同时可以通过javascript脚本来定制安装过程。目录结构configpackagesdatameta配置文件config/config.xmlpackages/[product]/meta/package.xmlpackages/[produ原创 2013-06-17 15:57:07 · 11037 阅读 · 0 评论 -
cmake管理visual studio无法显示头文件解决方法
原因我们的跨平台项目使用cmake来管理的,但是windows下的小伙伴发现在visual studio上头文件没有加载进来,于是手工加载,事情过去了。然后,有一天我修改了CMakeLists.txt文件,visual studio居然自动去重新生成了项目,然后头文件就没有了。哭吧~~~~解决方法source_group 可以将文件分目录来显示在IDE中。所以,修改了一下base.cmake文件让原创 2014-07-02 17:25:08 · 10737 阅读 · 3 评论 -
编译系统对跨平台代码的支持
问题起因项目需要跑在不同的平台上不希望代码中掺杂大量的define宏做平台判断(有洁癖呀~~~)定义一些通用宏来处理只能解决一些类型差异的问题处理将跨平台代码写入不同的文件夹下 os/linux 和 os/win在外部暴露的.h文件加入判断宏//file: public.h#ifdef WIN32#include "os/windows/public.h"#else#include "os原创 2014-05-09 11:47:31 · 3144 阅读 · 1 评论 -
c/c++资源(源码、开发工具、开发库)2014-05-09更新
开发工具:VIM 骨灰级玩家专属emacs 骨灰级玩家专属code::blocks 入门级推荐codelite 入门级首选eclipse+CDT 如果你经常用eclipse就直接装个cdt的插件吧netbeans 习惯netbeans的首选anjuta gtk首选KDeveloper 曾经的Linux下经典开发工具Xcode Mac系开发首选QtCreator Q原创 2009-05-13 12:45:00 · 20785 阅读 · 30 评论 -
C++11老关键字的新含义(auto, using,extern)
C++11对关键字进行了修订,加入了nullptr、constexpr、decltype、default、static_assert等,同时原有的关键字(auto,using,extern)含义和用途进行了修订。在这里主要了解一下对auto、using、extern这三个关键字的修订。auto自动化变量auto a = 12;auto b = 12.0f;原创 2012-10-26 08:48:15 · 10682 阅读 · 0 评论 -
C++代码风格的思考
C++/C就像他没有二进制标准一样,没有统一的代码风格,有unix风格的,有匈牙利风格的。自己很长一段时间也是比较郁闷,后来看到google C++ style的文档受益匪浅。但是STL、MS、Qt等代码风格各有不同,个人就产生了一些思考。缩进tab还是空格?更多的文档推荐用空格去而不用tab,仍旧有些会说tab的好处。2、4、8个空格?这对应着不同的缩进深度,2个空格是不是不明显原创 2012-07-14 12:30:50 · 4289 阅读 · 2 评论 -
C/C++命名风格
存在C/C++中的四种命名风格:帕斯卡(Pascal)命名法 首字母和后面连接的每个单词的首字母都大写。 例如: MyName骆驼(Camel)命名法 将标识符的首字母小写,而每个后面连接的单词的首字母都大写。 例如:myName匈牙利命名法 以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单原创 2012-08-20 15:38:01 · 6037 阅读 · 0 评论 -
gdb调试脚本
gdb脚本在在线调试时很有用处,使业务流程不被中断的情况下产生需要的调试信息,在不需要人工干预的情况下通过set logging file FILENAME和set logging on来实现将调试信息输出到文件。我们直接查看log文件就可以得到我们需要的调试信息了。gdb调试脚本我知道的有两种,一种是直接写gdb命令,一种是python脚本。gdb命令方式更直接且方便,但是支持的逻辑有限原创 2013-11-15 11:01:29 · 14403 阅读 · 0 评论 -
gcc 4.5.1交叉编译器构建过程
1、下载地址:http://ftp.gnu.org/gnu/ 下载内容:gcc,binutils,glibc2、步骤:1)binutils 2)最小化交叉编译gcc 3)linux kernel headers 4)glibc 5)最终版gcc3、由于binutils原创 2011-01-05 18:41:00 · 3762 阅读 · 0 评论 -
窥探内存管理
关于内存的问题是一个很初级的问题也是一个很高深的问题,确切的说是个入门必须了解的问题也是很有内涵的问题。如何认识内存,使用内存,管理内存是一个一直贯穿于编码过程的核心问题。抛弃所有的架构概念,剥离覆盖在软件开发的迷雾,程序本身只是一个内存中数据不断的迁移与CPU计算器不断进行数值运算的过程。一层层的高级语言和软件工程是将这个复杂过程的更加条理和有序的去组织,去除了“重复制造车轮”的烦恼。但是内存的原创 2013-06-17 16:21:19 · 2059 阅读 · 1 评论 -
clang static analyze
C++静态检查一般使用cppcheck直接一条cppcheck ./*.{h,cpp,hpp}命令搞定整个项目,最近发现用clang进行代码补全和代码分析更加强大,借助scan-build工具更好的完成整个过程直接使用clang扫描--analyze选项可以直接静态扫描源码--analyzer-check设置检查的内容-analyzer-checker-help可以列出可以原创 2014-01-16 14:22:38 · 3750 阅读 · 4 评论 -
C/C++易错点56条(持续更新中)
inline是给编译器的建议,函数放在头文件中并在定义时添加,在类声明时直接写的方法体,等同与添加了inline内联;struct、class、enum、union最后面记得加分号,namespace最后没有分号;默认参数是声明时使用的,默认参数必须在后边;virtual 在父类中声明才有意义,只在子类中声明是错误的。子类中的virtual是可有可无的,一般加上用来标示一下;extern原创 2012-05-03 18:20:48 · 5983 阅读 · 1 评论 -
aio,epoll,libevent,boost::asio解决的问题
这几天一直在做linux大批量数据的解决方案,不断的深入了解了一下aio,epoll,libevent,boost::asio。以前只知道他们都是做异步/非阻塞的,但是具体解决的问题的关键点是什么,通过这几天的深入了解,把他们总结一下:aio是linux2.6以后内核实现的异步IO,或者说他才是真正意义上的异步IO。<!--@page {margin:0.79in}p原创 2011-12-29 14:08:09 · 7160 阅读 · 0 评论 -
cmake与autoconf+automake的对比
首先,拿他们对比本身没有太多的意义,他们都是产生makefile文件的工具。cmake产生的晚,解决了很多autotools工具的问题。autotools是一个工具集具有强大的灵活性,但是因为步骤太多,配置繁琐,产生了很多的替代方案,cmake是其中最优秀的之一。当然很多其他替代品不会产生makefile文件而直接具有make的功能了。看到下图,你是不是感觉有些发晕。不过还好,它是“八股文原创 2012-05-07 17:03:15 · 32453 阅读 · 15 评论 -
动态链接库中使用c++类的方法
以前的关于动态链接库的写法多是直接采用extern 'C'的方式来实现,但是如果采用类来编写就会出现问题了,因为类在编译时是不能确定入口点位置的。这样就产生了问题。怎么来使用呢?前两个方法是在linux下直接使用普通函数调用的方法来实现的。后边的是在vc++中使用宏来对入口点动态调整输入输出__declspec(dllimport)和__declspec(dllexport) 方法1:原创 2008-01-02 13:01:00 · 10199 阅读 · 2 评论 -
为什么是C++谈谈我的学习关!
其实我和80后的大多数程序员一样,首先接触的是小霸王学习机上的basic语言。上小学时,一个行号,加上print语句就成了那个年代向同学们炫耀的资本。记得更好的是用play加上数字自己做的曲子,呵呵,简直没法听。正如大家想到的那样,那个年代的家长的无知,被他们扼杀。无奈的告别了,我亲爱的学习机。 上了高中,电脑开始普及,因为母亲学校要求学习电脑。我也就有了获得新生的机会了。家里配置原创 2008-10-15 09:08:00 · 2208 阅读 · 3 评论 -
Linux使用内存映射文件做内存池
因为最近项目中需要实现一个临时数据高速存储,所以最近对内存映射文件做了一下了解,写出来与大家分享一下,因为个人水平有限也许会有这样那样的问题也恳请大家指正。 mmap是linux内存映射文件,是将文件映射成为内存地址空间的一种方式,其实,方法很简单。memfd = open(MEMFILE, O_RDWR | O_CREAT, S_IWUSR | S_IRUSR);memd =原创 2012-03-12 15:48:25 · 5390 阅读 · 0 评论 -
返回引用是左值
函数返回值分为:值,引用,指针三种。引用是c没有而c++有的,并且因为引用是左值实现了运算符连续运算的基础,而值和引用都不可以。下面我们就来看一下这三种返回方式的各自的特点:1、返回值int test1(){ int a = 1; retur a;}返回值是最简单有效的方式,他的操作主要在栈上,根据函数栈的特性局部变量a会在函数结束时被删除,为了返回a的值,需要原创 2012-02-14 09:59:26 · 5835 阅读 · 4 评论 -
右值对传参的影响
大家看一下,下面的代码:class T{ public: int a;};void d(T &e){ printf("%d\n", e.a);}d(T());我们不想再多使用一个变量而直接实例化对像,并将其传递进函数,这种方式在java和c#中都是可以的(它们传递的是引用,语意上是合法的)。在C++中编译会出现下面的错误:inv原创 2012-02-03 15:12:11 · 2101 阅读 · 2 评论 -
工作代码片段-aio
aio是linux上的异步IO实现,具体测试代码如下: aiocb ab; bzero( (char *)&ab, sizeof(struct aiocb) ); int fd = open("a.txt", O_RDWR | O_APPEND); ab.aio_buf = malloc(201); ab.aio_fildes = fd; ab原创 2011-12-29 13:55:08 · 1668 阅读 · 0 评论 -
工作代码片段-boost::asio
同步服务端: boost::timer tm; io_service is; ip::tcp::acceptor acceptor(is, ip::tcp::endpoint(ip::tcp::v4(), 8000)); for(;;) { ip::tcp::socket so(is); acceptor.accept(so);原创 2012-01-06 12:34:19 · 1506 阅读 · 0 评论 -
工作代码片段-epoll
测试的实例: int fd = open("a.txt", 'r'); epoll_event ev; int efd = epoll_create(1); ev.events = EPOLLIN | EPOLLOUT; ev.data.fd = fd; epoll_ctl(efd, EPOLL_C原创 2011-12-28 09:26:56 · 1227 阅读 · 0 评论 -
工作代码片段-libevent
一个简单的测试实例: void acall(evutil_socket_t af, short, void *param) { std::cout << "calling" << std::endl; } sfd = open("a.txt", 'r'); struct event_原创 2011-12-28 09:22:51 · 1203 阅读 · 0 评论 -
工作代码片段-qsqlite
打开数据库: QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE"); database.setDatabaseName(mDataName); if(!database.open()) { return false; } QSqlQuery *queryer = new QS原创 2011-12-26 16:14:27 · 1420 阅读 · 0 评论 -
c++设计中的几种机制
1、PIMPL 私有化实现。解决头文件依赖,文件修改后整个系统需要重新编译的问题。他实现的是一个简单的桥接模式。在类中指针初始化的空间是固定的,不需要知道其具体的类型,所有采用前置声明的方式,可以不需要在头文件中引用他的头文件。这样即隐藏了引用类的实现细节,又减少了编译时文件修改后的编译关联性。2、NVI 提供一个公有的非虚接口函数,将虚函数私有化。实现行为和接口的分离。原创 2011-10-26 12:01:52 · 1310 阅读 · 0 评论 -
C 语言之父,UNIX 系统之父 Dennis Ritchie (丹尼斯 里奇)于 10 月 9 日去世,享年 70 岁
C 语言之父,UNIX 系统之父 Dennis Ritchie (丹尼斯 里奇)于 10 月 9 日去世,享年 70 岁。Dennis Ritchies 与 Brian Kernighan 一起创造了对计算机领域影响重大的编程语言 C,对后续的各式编程语言: C++, C#,转载 2011-10-13 14:53:19 · 1767 阅读 · 0 评论 -
谎言与诚实谜题
诚实村与谎言村一天,你跟随渔夫出海打鱼,在海上遇到了大风浪而迷失了方向,小船被刮到了一座小岛上。岛上有两个相邻的村子,一个叫诚实村,一个叫谎言村,诚实村的村民只会说真话,从不撒谎,而谎言村的村民则只说谎话,从不说真话。所以你决定想办法区分出这不同的两组人,弄清楚谁说的是真话,原创 2011-08-03 11:40:03 · 2836 阅读 · 0 评论