C/C++
文章平均质量分 95
yansmile1
这个作者很懒,什么都没留下…
展开
-
C 语言 switch 语句
在有多个选择分支条件的情况下,用if 语句难免会繁琐且效率不高,此时便是switch语言的用武之地。 int i=1; switch(i){ case 0: printf("0"); case 1: printf("1"); case 2: printf("2"转载 2017-04-17 11:02:33 · 688 阅读 · 1 评论 -
C++仿函数(functor)
摘要: c++仿函数(functor)概念及应用什么是仿函数(functor) functor的英文解释为something that performs a function,即其行为类似函数的东西。C++中的仿函数是通过在类中重载()运算符实现,使你可以像使用函数一样来创建类的对象。仿函数(functor)的实现及使用// this is a functors转载 2017-02-28 16:38:19 · 5433 阅读 · 0 评论 -
用extern定义全局变量
1.extern的作用 extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b); 则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的, C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了转载 2016-12-20 17:34:23 · 1086 阅读 · 0 评论 -
IO中同步、异步与阻塞、非阻塞的区别
一、同步与异步同步/异步, 它们是消息的通知机制1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数转载 2016-12-19 17:18:48 · 211 阅读 · 0 评论 -
memmove 和 memcpy的区别以及处理内存重叠问题
区别:memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:[cpp] view plain copy void *memcpy(void *dst, const void *src, size_t count); void *memmove(void *dst,转载 2016-12-19 10:49:53 · 918 阅读 · 0 评论 -
C++中#define的使用方法
今天整理了一些#define的用法,与大家共享! 1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。 这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而转载 2016-12-19 09:06:55 · 1604 阅读 · 1 评论 -
Boost.Asio入门
首先,让我们先来了解一下什么是Boost.Asio?怎么编译它?了解的过程中我们会给出一些例子。然后在发现Boost.Asio不仅仅是一个网络库的同时你也会接触到Boost.Asio中最核心的类——io_service。什么是Boost.Asio简单来说,Boost.Asio是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的C++库。计算机网络的设计方式有很多种,但是Boost转载 2016-12-23 16:03:33 · 539 阅读 · 0 评论 -
【C++11】新特性——auto的使用
本篇文章由:http://www.sollyu.com/c11-new-features-auto/文章列表本文章为系列文章【C++11】新特性——auto的使用 http://www.sollyu.com/c11-new-features-auto/【C++11】新特性——Lambda函数 http://www.sollyu.com/c11-new-lambda-fu转载 2016-12-23 14:58:28 · 293 阅读 · 0 评论 -
C++编译与链接(1)-编译与链接过程
大家知道计算机使用的一系列的1和0那个一个C++语言程序又是如何从一个个.h和.cpp文件变成包含1和0的可执行文件呢? 可以认为有以下的几个环节源程序->预处理->编译和优化->生成目标文件->链接->可执行文件 1.预处理C++的预处理是指在C++程序源代码被编译之前,由预处理器对C++程序源代码进行的处理。这个过程并不对程序的转载 2016-12-23 14:57:42 · 299 阅读 · 0 评论 -
C++编译链接的那些小事
最近,有同事向我多次问及C++关于编译链接方面的问题,包括如下:1:什么样的函数以及变量可以定义在头文件中2:extern "C"的作用3:防止重复包含的宏的作用4:函数之间是怎么链接起来的我认为,这些问题不难,书上基本上都有,但要是没有真正思考过,就凭死记硬背,也就是只能“嘴上说说”而已,遇到问题还真棘手,所以我觉得有必要说一下。C/C转载 2016-12-23 14:56:45 · 298 阅读 · 0 评论 -
c/c++程序编译连接过程
转载http://www.cnblogs.com/hongfenglee/archive/2012/02/18/2356808.html详解link转载 2016-12-23 14:55:43 · 297 阅读 · 0 评论 -
string与wstring转换
方法一:MultiByteToWideChar、WideCharToMultiByte 1 BOOL StringToWString(const std::string &str,std::wstring &wstr) 2 { 3 int nLen = (int)str.length(); 4 wstr.resize(nLen,L' ');转载 2016-12-23 14:54:22 · 1010 阅读 · 0 评论 -
C++的中英文字符串表示(string,wstring)
在C++中字符串类的string的模板原型是basic_string template class _Elem, class traits = char_traits_Elem>, class _Ax = allocator_Elem>>class basic_string{}; 第一个参数_Elem表示类型。第二个参数traits的缺省值使用char转载 2016-12-23 14:53:31 · 2633 阅读 · 0 评论 -
C++中的locale设置 (即系统区域设置)
C++中的locale设置参考:区域设置和代码页C/C++程序中,locale(即系统区域设置,即国家或地区设置)将决定程序所使用的当前语言编码、日期格式、数字格式及其它与区域有关的设置,locale设置的正确与否将影响到程序中字符串处理(wchar_t如何输出、strftime()的格式等)。因此,对于每一个程序,都应该慎重处理locale设置。C转载 2016-12-23 14:51:09 · 4403 阅读 · 0 评论 -
解决Windows记事本打开Linux程序注释乱码排版混乱的问题
本人彻彻底底小白一枚,前来科普下这个还算大众化的问题,大神绕过 ~~有说错的地方,欢迎指正 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~大家都知道,Linux下的文本默认采用UTF-8格式,而Windows下一般是ANSI格式。本来大家相安无事,转载 2016-12-23 14:48:35 · 2613 阅读 · 0 评论 -
typedef常见用法
1.常规变量类型定义例如:typedef unsigned char uchar描述:uchar等价于unsigned char类型定义 uchar c声明等于unsigned char c声明2.数组类型定义例如: typedef int array[2];描述: array等价于 int [2]定义; array a声明等价于int a[2]声明扩展: typedef int转载 2016-12-15 16:10:36 · 308 阅读 · 0 评论 -
计算结构体的大小(对齐)
结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存空间。和数组不一样的是,结构体的大小不是所有成员大小简单的相加,需要考虑到系统在存储结构体变量时的地址对齐问题。看下面这样的一个结构体: struct stu1 { int i; char c; int j; }; 先介绍一个相关的概念——偏移量。偏移量指的是结构体变量中成员的地址转载 2017-02-27 16:24:43 · 298 阅读 · 0 评论 -
C++中string与char*相互转换
一、string转换为char*有3中方法:1.datastring str="good boy";constchar *p=str.data();2.c_strstring str="good boy";constchar *p=str.c_str();3. copystring str="good boy";char p[20];st转载 2017-03-02 20:03:02 · 534 阅读 · 0 评论 -
对于linux下system()函数的深度理解(整理)
这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以为是其他的代码影响到这个,或是内核驱动文件系统什么的异常导致,昨天有出现了这个问题,就随手百了一下度,问题出现了,很多人都说system()函数要慎用要少用要能不用则不用,system()函数不稳定?转载 2017-03-02 20:06:28 · 296 阅读 · 0 评论 -
使用if和goto语句构造循环
goto是C/C++中一种非常古老的保留字,goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。if语句和goto语句搭配使用可以构造循环,if语句作为循环的条件判断,goto用来跳转以反复执行某些语句(循环体)以达到循环执转载 2017-04-17 10:59:10 · 5839 阅读 · 0 评论 -
GNU C与ANSI C
Linux上使用的C编译器是GNU C编译器,其对标准的C(ansi c)进行了一定的扩展,这带来的影响是两方面的。一方面增强了其原来的没有的功能,另一方面却对要编写移植性要求较高的程序带来了一些问题。对于后一个问题,在编写程序时,建议是如果在ANSI C中也提供的同样的功能时,尽量使用ANSI C来实现,当然如果不考虑程序的移植性,比如说,我们就是要在一个产品上写一段代码,那就不需要考虑这些转载 2017-04-17 10:57:29 · 341 阅读 · 0 评论 -
Makefile经典教程(掌握这些足够)
该篇文章为转载,是对原作者系列文章的总汇加上标注。支持原创,请移步陈浩大神博客:http://blog.csdn.net/haoel/article/details/2886makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和profes转载 2017-04-20 13:55:47 · 729 阅读 · 0 评论 -
使用Google Test的一个简单例子(接合上一篇看)
0. 引子 本例是从 gtest-1.5.0 自带的 sample 中的 sample1 改写而来,笔者只添加了一个求 n 的阶层的函数,如下。void Factorial(int n, int & result ){ result = 1; for (int i = 1; i result *= i;}目的是想测试像这样转载 2017-04-20 11:57:25 · 888 阅读 · 0 评论 -
Google Test测试框架自带Sample案例注释翻译
有一段时间没写博客了,前些时间闲下来看了下google test(gtest)测试框架自带的sample测试样例,感觉还不错,就对里面的注释进行了相关翻译,在此做个标录,对测试流程、方法和设计的理解会有些帮助,方便日后重新查阅,有兴趣的同志不妨看一下相关说明: 1、项目工程可到附件中下载 2、项目工程在visual studio2005环境下编译运行的转载 2017-04-20 11:54:54 · 2514 阅读 · 0 评论 -
thrift C++做server, C++,python, java做Client例子
一、安装我机器上已经安装好了 thrift-0.9.1二、示例编辑demo.thrift文件,内容如下:struct UserProfile{ 1:i32 id, //注意这里是逗号,而不是分号 2:string name, 3:string blurb} //这里没有分号 servi转载 2017-04-20 10:36:57 · 468 阅读 · 0 评论 -
C语言atoi()函数:将字符串转换成int(整数)
头文件:#include atoi() 函数用来将字符串转换成整数(int),其原型为:int atoi (const char * str);【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并转载 2017-04-05 16:40:19 · 587 阅读 · 0 评论 -
CString与string、char*的区别和转换
我们在C++的开发中经常会碰到string、char*以及CString,这三种都表示字符串类型,有很多相似又不同的地方,常常让人混淆。下面详细介绍这三者的区别、联系和转换:各自的区别char*:char*是一个指向字符的指针,是一个内置类型。可以指向一个字符,也可以表示字符数组的首地址(首字符的地址)。我们更多的时候是用的它的第二的功能,来转载 2017-04-05 16:08:37 · 286 阅读 · 0 评论 -
【STL】string中c_str()、data()函数的用法
标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。1. c_str():生成一个const char*指针,指向以空字符终止的数组。注:①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中。注意。看下例:转载 2017-04-05 15:42:36 · 16583 阅读 · 1 评论 -
CString/string 区别及其转化
CString/string 区别及其转化利用MFC进行编程时,我们从对话框中利用GetWindowText得到的字符串是CString类型,CString是属于MFC的类。而一些标准C/C++库函数是不能直接对CString类型进行操作的,所以我们经常遇到将CString类型转化char*等等其他数据类型的情况。这里总结备忘于此!首先要明确,标准C中是不存在strin转载 2017-04-05 15:18:49 · 390 阅读 · 0 评论 -
C++ 中 ZeroMemory、memset 危险需慎用
使用C/C++编程时,常使用ZeroMemory、memset或 “={0}”来对结构体对象进行初始化或清零。然而这三种方式都有各自的特点,使用时需谨慎,否则容易出现严重错误,本人今日解决一个导致宕机的bug,查了几小时,才发现是由同事乱用ZeroMemory所致。于是搜集资料,撰此文以共勉。memsetvoid *memset(void *s,int ch转载 2017-04-05 13:52:20 · 340 阅读 · 0 评论 -
double数据的内存存储方式
从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。 任何数据在内存中都是以二进制(0或1)顺序存储的,每一个1或0被称为1位,而在x86CPU上一个字节是8位。比如一个16位(2字节)的short int型变量的值是1000,那么它的二进制表达就是:00000011 111转载 2017-04-12 18:41:32 · 33370 阅读 · 3 评论 -
c++ vector begin(),end(),rbegin(),rend()问题
C++ primer (中文版第四版)第273页9.3.2 begin和end成员 begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器。这两个迭代器通常用于标记包含容器中所有元素的迭代范围。c.begin() 返回一个迭代器,它指向容器c的第一个元素c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一个位置转载 2017-03-24 16:00:45 · 1544 阅读 · 1 评论 -
TCP通信粘包问题分析和解决(全)
在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。对于UDP,不会使用块的转载 2017-03-28 14:46:43 · 773 阅读 · 1 评论 -
BOOST 线程完全攻略 - 基础篇
C++多线程开发是一个复杂的事情,mfc下提供了CWinThread类,和AfxBeginThread等等函数,但是在使用中会遇到很多麻烦事情,例如线程之间参数传递的问题,我们一般都是把参数new一个结构体,传递给子线程,然后释放的工作交给了子线程,这样不可避免会有内存泄漏的危险,例如线程关闭的问题,我们一般用WaitForSingleObject来完成线程关闭工作,但是这个函数并不一定保证线程能转载 2017-03-21 13:51:42 · 463 阅读 · 0 评论 -
在运行时调用动态链接库 VS2010示例
这里不再介绍动态链接库概念等知识,纯粹新建一个项目用来表述怎么在运行时调用动态链接库,代码中会给出相关注释。开发工具用的是VS2010旗舰版。一、创建动态链接库项目:1.新建项目——选择Win32项目,输入名称后(这里我输入的项目名称为sunlib),然后选择下一步,在随后的应用程序类型中选择 “DLL”,单击完成,即可完成创建DLL项目如下图所示:转载 2016-12-14 16:56:12 · 1720 阅读 · 0 评论 -
__stdcall 和 __cdecl 的区别浅析
1. __cdecl__cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,由调用者负责把参数压入栈,最后也是由调用者负责清除栈的内容,一般来说,这是 C/C++ 的默认调用函数的规则,MS VC 编译器采用的规则则是这种规则2. __stdcall_stdcall 是StandardCall的缩写,是C+转载 2016-12-16 16:19:02 · 338 阅读 · 0 评论 -
VS2013常用快捷键
VS2013常用快捷键: 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”; 2)前进到下一个光标位置:“Ctrl + Shift + - ”。 2.复制/剪切/删除整行代码 1)如果你想复制一整行代码,只需将光标移至该行,再使用组合键“Ctrl+C”来完成复制操作,而无需选择整行。 2)如果你想剪转载 2016-12-16 16:08:04 · 227 阅读 · 0 评论 -
new/delete 和malloc/free 的区别一般汇总
一、基本概念 malloc/free:1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系转载 2015-10-13 20:02:12 · 447 阅读 · 0 评论 -
C++学习篇——纯虚函数和抽象类
纯虚函数是一种特殊的虚函数,它的一般格式如下: class { virtual ()=0; … }; 在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。下面给出一个纯虚函数的例子。 #include class po转载 2016-04-13 23:03:24 · 1335 阅读 · 0 评论 -
大小端模式
一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必转载 2015-12-08 16:36:18 · 368 阅读 · 0 评论