┈┈【C / C++发现】
文章平均质量分 93
CHENG Jian
天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。
展开
-
ARM开发板上交叉编译usb转串口驱动
问题这两天为了做gps和arm的通讯,不得不捣鼓这个东东。开发板是创维特jx2410,usb转串口线的芯片是pl2303。还好是这个芯片,让我没费多少力气,就达成了目的。因为linux对它已经支持了,我们只要编译、加载它的驱动就ok了。驱动源码一般来说USB转串口的驱动已经集成在内核中,我们无需下载,只需要在编译时进行一些配置即可. 因此在编译之前我们需要确认自己的内核中有没有USB转串口的驱动原创 2015-10-29 15:03:36 · 7329 阅读 · 0 评论 -
C++中typename和class在声明模板时的区别
问题在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?template<class T> class Widget; // uses "class"template<typename T> class Widget; // uses "typename"答案:没什么不同。在声明一个 template type parameter(模板原创 2016-03-21 14:21:30 · 7075 阅读 · 3 评论 -
C++ typeid关键字详解
typeid关键字 注意:typeid是操作符,不是函数。这点与sizeof类似)运行时获知变量类型名称,可以使用 typeid(变量).name()需要注意不是所有编译器都输出”int”、”float”等之类的名称,对于这类的编译器可以这样使用int ia = 3;if(typeid(ia) == typeid(int)){ cout <<"int" <<endl;}RTTI(原创 2016-03-21 17:16:33 · 72021 阅读 · 4 评论 -
Linux下套接字详解(八)----select模式下服务器(非阻塞,单进程+多进程+多线程)
前言首先让我们回顾一下子我们之前都讲了那些最开始我们将了一下子Linux下套接字详解(一)—-TCP/UDP的区别与联系其中简要提到了三次握手与四次挥手,但是不是很详尽,于是我转载了一篇 Linux下套接字详解(补充)—- TCP协议中的三次握手和四次挥手(图解)然后在第一篇博文中,我们讲解了socket的API接口,详情请见Linux下套接字详解(二)—-套接字Socket好了现在我们有了基础了,原创 2016-03-08 21:51:07 · 4643 阅读 · 0 评论 -
C++模板的特化详解(函数模版特殊,类模版特化)
参照 小解C++模板特化 C++模板的特化 模板的全特化与偏特化模版与特化的概念函数模版与类模版C++中模板分为函数模板和类模板函数模板:是一种抽象函数定义,它代表一类同构函数。类模板:是一种更高层次的抽象的类定义。特化的概念所谓特化,就是将泛型的东东搞得具体化一些,从字面上来解释,就是为已有的模板参数进行一些使其特殊化的指定,使得以前不受任何约束的模板参数,或原创 2016-03-22 14:40:24 · 58525 阅读 · 8 评论 -
僵尸进程zombie与孤儿进程orphan
问题提出 以前在学习《unix环境高级编程》进程时候,提到孤儿进程和僵尸进程,但是一直对这两个概念比较模糊。于是今天做了一些测试程序,并把这些记录下来. 僵尸进程/僵死进程 In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for it, is原创 2015-12-10 23:41:47 · 5984 阅读 · 1 评论 -
C++ Traits编程技法--从迭代器的设计看参数推导与类型推导
迭代器与相应类型推导在写作泛型函数或代码时,我们可能存在这样的需要:与参数相关的其它类型,比如一个迭代器的值的类型,在算法中运用迭代器时,很可能会用到其也叫相应类型(associate type)。什么是相应类型? 迭代器所指之物的类型就是其中一个。如果我们的算法中有必要声明一个变量,以”迭代器所指对象的类别”为型号。本文要向大家展示一个函数模板推导机制使用技法,这个在STL的迭代器和许多排序算法原创 2016-03-21 23:19:55 · 2524 阅读 · 1 评论 -
值得推荐的C/C++框架和库
http://www.cplusplus.me/2182.htmlC++资源大全关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。标准库C++标准库,包括了STL容器,算法和函数等。这里写链接内容C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。转载 2016-02-13 13:04:30 · 18199 阅读 · 4 评论 -
C++ explicit关键字详解
单参数构造函数作为隐含的类型转换符号C++中,一个参数的构造函数(或者除了第一个参数外其余参数都有缺省值的多参构造函数),承担了两个角色。用于构建单参数的类对象隐含的类型转换操作符. 例如一个类A的构造函数A(int i)就是,既可以用来作为构造器,又可以实现隐式转换A a=1;因为1可以通过构造函数A(int i)转换为一个类A的对象。#include <iostream>class Ba原创 2016-03-12 22:15:08 · 11202 阅读 · 0 评论 -
报错storage size of ‘act’ isn’t known当使用std=c99编译struct sigaction
问题今天在学习进程间通信之-信号signal–linux内核剖析(九) 遇见了一个奇怪的问题storage size of ‘oldact’ isn’t known于是FQ去google之。分析了好久,终于发现问题的原因了。于是记录下来发现测试的代码如下#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <bits/原创 2016-03-27 16:10:38 · 12204 阅读 · 2 评论 -
C++智能指针auto_ptr详解
auto_ptrauto_ptr是C++标准库中()为了解决资源泄漏的问题提供的一个智能指针类模板(注意:这只是一种简单的智能指针)auto_ptr的实现原理其实就是RAII,在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针。std::auto_ptr<ClassA> pa(new ClassA);但是由于其构造函数声明为explicit的,因此不能通过饮原创 2016-03-20 23:37:07 · 14273 阅读 · 1 评论 -
STL源码剖析--概述
学习教程凝霜–对STL源代码加了详细的注释–但是看着不方便,一篇博文只讲一个文件C++ STL源码剖析–对凝霜的详细索引,一篇博客存储了所有的文件侯捷的网站这里写链接内容Github的STL索引 c++泛型编程编译器支持检测–代码对应书中1.8~1.9节概述STL源码剖析-侯捷C++标准链接库中隶属 STL 范围者,粗估当在 80%以上。对软件开发而言,STL 是尖?利兵,可以节省你许多时间。对原创 2016-03-20 18:02:17 · 2185 阅读 · 1 评论 -
Linux下errno错误信息对照
在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。以下主要来自2.6.32的内核代码中的/usr/include/asm-generic/errno.h及errno-base.h,输出错误原因定义归纳整理如下,我们可以使用如下代码输出#include <string.h>#include <errno.h> /* for strerror */#include <st原创 2016-01-22 16:14:56 · 5294 阅读 · 0 评论 -
QT实现应用程序重启
示例程序代码上传至https://github.com/gatieme/AderXCoding/tree/master/qt/restart问题描述有时候写的程序在运行中有时候出现问题,期望能够通过重启来解决,但是在我们的Qt中并没有内置实现这样功能的接口,这就不得不需要自己实现。重启,无非就是关闭当前应用程序,然后再启动一个新的进程执行当前应用程序实现重启的方法目前常用的有两种方式实现重启 方原创 2015-12-21 22:21:24 · 11751 阅读 · 0 评论 -
C语言中声明和定义详解
变量声明和变量定义变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。变量声明:用于向程序表明变量的类型和名字。定义也是声明,extern声明不是定义 定义也是声明:当定义变量时我们声明了它的类型和名字。 extern声明不是定义:通过使用extern关键字声明变量名而不定义它。 [注意] 变量在使用前就要被定义或者声原创 2016-02-06 16:56:05 · 49831 阅读 · 12 评论 -
C/C++中的static关键字的总结
static的历史 术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。 随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。 最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是原创 2016-03-15 22:38:10 · 1770 阅读 · 0 评论 -
Linux下套接字详解(六)----基于pthread的多线程的TCP套接字(阻塞/同步/并发)
上节我们实现了一个简单的多进程的服务器程序,这节,我们服务器的框架不做修改,只是将其修改为一个多线程的服务器程序。直接上代码server#include <stdio.h>#include <stdlib.h>#include <string.h>#include <strings.h>#include <errno.h>#include <netinet/in.h>#include原创 2016-03-03 21:41:27 · 4384 阅读 · 0 评论 -
浅谈 C++ 中的 new/delete
本文转载自 浅谈 C++ 中的 new/delete 和 new[]/delete[]new 和 deletenew 和 delete 到底是什么?如果找工作的同学看一些面试的书,我相信都会遇到这样的题: sizeof不是函数,然后举出一堆的理由来证明 sizeof 不是函数。在这里,和sizeof类似,new和delete也不是函数,它们都是C++定义的关键字,通过特定的语法可以组成表达式。和转载 2016-03-17 21:31:37 · 2178 阅读 · 0 评论 -
C语言实现函数重载
参考 Overloading Functions in C函数重载大家都知道 C++ 等支持面向对象的语言支持函数重载,那么编译器是如何辨别这些函数的呢?C++如何实现重载C++ 实现函数重载很大程度上依赖与编译器对函数名的 Mangling(损坏,破坏),即 C++ 的源代码被编译后同名的重载函数名字会被破坏,一般是在原函数名前后加上特定的字符串(g++编译器中通过在函数名后面添加参数的后缀)原创 2016-03-18 11:30:26 · 30386 阅读 · 2 评论 -
C语言实现封装、继承和多态
参照 C语言实现封装、继承和多态–通过创建一个VTable(virtual table)和在基类和派生类对象之间提供正确的访问 如何实现 C 语言的继承和多态–通过函数指针来实现的继承与多态,简单明了,animal基类,cat,dog两个派生类 技巧:用 C 语言实现程序的多态性–oid *:万能的指针“挂钩” 【C】——C利用回调函数实现多态关于多态多态转载 2016-03-19 10:57:15 · 7707 阅读 · 0 评论 -
Linux下套接字详解(七)----线程池accept处理高并发connect
前言服务器在调用listen和accept后,就会阻塞在accept函数上,accpet函数返回后循环调用accept函数等待客户的TCP连接。 我们知道服务器段listen套接字能处理的连接数与监听队列的大小有关,如果这时候又大量的用户并发发起connec连接,那么在listen有队列上限(最大可接受TCP的连接数)的情况下,有多少个connect会成功了。试验证明,当连接数远远高于listen原创 2016-03-08 18:15:18 · 8819 阅读 · 1 评论 -
[C/C++] 显示各种C/C++编译器的预定义宏(C11标准、C++11标准、VC、BCB、Intel、GCC)
转载自来源: [C/C++] 显示各种C/C++编译器的预定义宏(C11标准、C++11标准、VC、BCB、Intel、GCC) http://dev.gameres.com/Program/Other/ErrorDebug.htm http://blog.csdn.net/sealyao/article/details/6169568作者:zyl910 在编写跨平台的程序时,我转载 2016-04-16 23:08:15 · 5968 阅读 · 0 评论 -
Linux下套接字详解(五)----基于fork多进程的TCP套接字(阻塞/同步/并发)
简介一个简单的改进方案是在服务器端使用多线程(或多进程)。多线程(或多进程)的目的是让每个连接都拥有独立的线程(或进程),这样任何一个连接的阻塞都不会影响其他的连接。具体使用多进程还是多线程,并没有一个特定的模式。传统意义上,进程的开销要远远大于线程,所以如果需要同时为较多的客户机提供服务,则不推荐使用多进程;如果单个服务执行体需要消耗较多的CPU资源,譬如需要进行大规模或长时间的数据运算或文件访问原创 2016-01-31 16:44:17 · 5234 阅读 · 0 评论 -
有符号数和无符号数的转换及思考
1 有符号数和无符号数的表示三者的最高位均为符号位.我以前一直没弄明白的是为何8位补码的表示范围是-128~127, 今天查阅了相关资料,于此记下。仍然以8位为例:原码原码的表示范围-127~-0, +0~+127, 共256个数字。正0的原码是0000 0000, 负0的原码是1000 0000, 有正0负0之分, 不符合人的习惯, 待解决.反码除符号位, 原码其余位取反而得 +0:0000原创 2016-09-16 21:00:51 · 31147 阅读 · 3 评论 -
C++与C之间相互接口和库函数调用
1 C++中调用C的接口我们在阅读一些库的代码的时候, 经常看到有些函数被extern “C”来修饰1.1 extern “C”引入C的库代码如下所示extern "C" void func();如果需要修饰的函数比较多, 则使用如下方式#ifdef __cplusplusextern "C"{#endif/////////////////////// 一段代码//////////原创 2016-10-04 00:12:44 · 23474 阅读 · 4 评论 -
qwt的安装和移植-
qwt介绍QWT,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目, 可生成各种统计图。它为具有技术专业背景的程序提供GUI组件和一组实用类,其目标是以基于2D方式的窗体部件来显示数据, 数据源以数值,数组或一组浮点数等方式提供, 输出方式可以是Curves(曲线),Slider(滚动条),Dials(圆盘),Compa原创 2014-05-14 09:53:03 · 18193 阅读 · 1 评论 -
C/C++log日志库比较
事实上,在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C++的log4cxx)。C程序员都喜欢用自己的轮子。printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者输出文件。syslog是个系统级别的轮子,不过速度慢,而且功能比较单调。尝试了几种C/C++ log库,简单记录如下:log4j的衍生品日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是原创 2016-01-28 23:21:24 · 66899 阅读 · 9 评论 -
Sublime Text 3配置Windows下C/C++编译环境
在Linux或者Mac OS中我们选择【工具 / 编译系统 / C++(Tools / Build System / C++)】就可以配置C/C++的编译环境,但是在Windows环境下,我们却需要做更多的设置首先我们需要设置MinGW编译器的环境变量,使我们可以直接使用gcc/g++命令,这点我们就不重复了,不会的请大家自行脑补我们直接讲Sublime Text的配置方法工具 / 编原创 2015-01-17 18:20:10 · 21143 阅读 · 1 评论 -
C语言0长度数组(可变数组/柔性数组)详解
C语言0长度数组(可变数组/柔性数组)详解 CSDN GitHub C语言0长度数组(可变数组/柔性数组)详解 AderXCoding/language/c/zero_length_array 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 1 零长度数组概念众所周知, GNU/GCC 在标准的 C/C++ 基础上做原创 2017-03-20 19:37:26 · 65036 阅读 · 14 评论 -
几款好的C/C++编译器(编译器而非IDE)
几个介绍IDE的博客:C/C++开发常用工具及系统编程C/C++开发者必不可少的15款编译器+IDE 大家说的都已经很多了,那么我在这里就不罗嗦口了,我着重讲下编译器。GCC(GNU Compiler Collection)官方网站: https://gcc.gnu.org/GCC有Windows移植版本,比较出名的就是MinGW和T原创 2015-01-20 11:11:37 · 73256 阅读 · 1 评论 -
Sublime Text[崇高文本]----最性感的编辑器(程序员必备)
代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大、灵活的编辑器,相信你和我一样,都不会例外。自打开始编程,我就开始试过不少编辑器,比如editplus,ultraedit,emacs,vim,还有各种各样不同的IDE,但却没有哪款让我特别心仪的,直到我遇到了 Sublime Text 2 !原创 2015-01-15 19:11:26 · 19971 阅读 · 3 评论 -
Linux下的代码格式工具详解(indent, clang-format, astyle)
Linux下的代码格式工具详解 CSDN GitHub Aderstep–紫夜阑珊-青伶巷草 AderXCoding/system/tools/code_format 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处 1 indentindent 可辨识 C 的原始代码文件, 并加以格式化, 以方便程序设计师阅读.Linux ke原创 2017-06-24 15:05:34 · 12681 阅读 · 0 评论 -
C++成员函数的重载、覆盖与隐藏详解
成员函数的重载、覆盖与隐藏成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。在看《高质量c/c++》中看到了函数的隐藏和覆盖是这么说的:覆盖的是指子类函数覆盖基类函数 在不同的类内(分别位于子类和父类)。 同名同参。 基类的函数名前必须有virtual关键字。 隐藏指派生类的函数隐藏了基类的同名函数 如果派生类函数与基类函数同名,但转载 2016-03-15 21:13:59 · 4694 阅读 · 0 评论 -
C程序的内存布局(Memory Layout)
C语言程序的内存布局C语言程序的内存布局结构,包括连接过程中目标程序各个段的组成和运行过程中各个段加载的情况。C语言程序在内存中各个段的组成C语言程序连接过程中的特性和常见错误C语言程序的运行方式C语言程序的存储区域 由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-链接三个阶段。编译过程把C语言文本文件生成汇编程序,汇编过程把汇编原创 2015-02-06 20:26:40 · 27724 阅读 · 7 评论 -
QT中实现程序只运行一个实例--应用程序的单例化
起因最近想实现一个应用程序单例化的程序, 目前使QT运行一个实例有如下几种方式 1.QSharedMemory 使用共享内存,当第二个进程启动时,判断内存区数据是否建立,如有,则退出; 这种方式有弊端,在程序发生崩溃时,未及时清除共享区数据,导致程序不能正常启动. 2.文件锁 在程序运行的时候就在目录下创建一个文件,当程序运行时就判断这个原创 2016-01-31 13:58:04 · 14797 阅读 · 1 评论 -
C/C++中的const--常量指针与指针常量
问题解析常量指针常量指针是指向常量的指针,指针指向的内存地址的内容是不可修改的。 即指针指向了一个常量,但是指针本身是一个变量定义const int *p=&a; 这条语句告诉编译器,*p是常量,不能将*p作为左值进行操作。但这里的指针p还是一个变量,它的内容存放常量的地址,所以先声明常量指针再初始化是允许的,指针也是允许修改的示例int a = 0,b = 1;const int *p;原创 2015-10-05 11:48:38 · 3027 阅读 · 1 评论 -
Linux下套接字详解(四)----简单的TCP套接字应用(迭代型)
前面我们已经将了TCP/UDP的基本知识,还说了并发服务器与迭代服务器的区别,我们大致了解大多数TCP服务器是并发的,大多数UDP服务器是迭代的 ,即我们在进行数据传送的时候,往往使用服务器与客户但之间无连接的UDP报文,但是在用户需要上传下载文件时,就会在客户端和服务器之间建立一条TCP连接,进行文件的传送 那么我们下面就来实现一个简单的TCP服务器。TCP套接字编程模型图我们首先看一下TCP客原创 2015-06-07 21:21:31 · 5565 阅读 · 4 评论 -
Linux下套接字详解(二)----套接字Socket
在前面我们讲了TCP/IP、TCP和UDP的一些基本知识,但是协议只有一套,而我们系统多个TCP连接或多个应用程序进程必须通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。套接口可以说是网络编程中一个非常重要的概念,linux以文件的形式实现套接口,与套接口相应的文件属于sockfs特殊文件原创 2015-06-02 19:59:23 · 21528 阅读 · 0 评论 -
Linux下套接字详解(一)----TCP/UDP的区别与联系
TCP/IP简介TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议TCP/IP虽然叫传输控制协议(TCP)和网际协议(IP),但是实际上是一组协议,包含ICMP, RIP, TELENET, FTP, SMTP, ARP, TFTP等。从协议分层模型方面来讲,TCP/IP协议集包括应用层,传输层,网络层,网络访问层。 其中应用层包括: 协议 名称 描述 HTTP 超文本传输原创 2015-05-29 21:22:45 · 8001 阅读 · 1 评论 -
面试题:从给定的N个正数中选取若干个数之和最接近M
转载自 http://www.ahathinking.com/archives/110.html 文章作者:Yx.Ac 文章来源:勇幸|Thinking (http://www.ahathinking.com) 转载请注明,谢谢合作。这道题跟捞鱼问题一样,都是刚进实验室新生培训那会儿做过的题目,不过这个是一师姐当时找工作的面试题。 如题,并输出该子序列 测试用例:2转载 2016-06-04 22:23:09 · 5285 阅读 · 0 评论