
c++
文章平均质量分 94
P.TAN
每篇文章的开头是个人笔记,之后才是原文
展开
-
vs2017那点小bug
一、vs2017无法查找或打开 pdb 文件解决方法步骤1.勾选工具->选项->调试->常规->启动源服务器支持;启动源服务器支持下面的三栏不用勾选;确定后弹出对话框选 是;步骤2.勾选工具->选项->调试->符号->Microsoft符号服务器;确定在弹出的对话框选 是;步骤3.点击本地调试器运行稍长下载之后,恭...转载 2018-09-29 18:12:19 · 1106 阅读 · 0 评论 -
编译OSIP(原生库) 到Arm平台下(android、iOS),makefile实战用例
原标题:在ubuntu下交叉编译linphone支持库OSIP 到Arm平台下(android、iOS)的正确方法最近项目里面要编译linphone中用的开源SIP库——OSIP给移动端使用。 网上关于交叉编译OSIP到arm平台下的方法大多语焉不详。尤其可恨的是许多雷同的,还特么不能用!!! 亲们,你们在转载之前有实际测试过么?!!!!! 我还是那句话: 人云亦云是畜生啊!!! 废话...转载 2018-12-25 14:26:07 · 958 阅读 · 0 评论 -
C++queue容器学习(详解)
一.queue模版类的定义在<queue>头文件中。queue与stack模版非常类似,queue模版也需要定义两个模版参数,一个是元素类型,一个是容器类型,元素类型是必要的,容器类型是可选的,默认为dqueue类型。定义queue对象的示例代码如下:queue<int>q1;queue<double>q2;queue的基本操作有:1.入...转载 2019-01-06 14:21:31 · 265 阅读 · 1 评论 -
C/C++文件读写操作——FILE*、fstream、windowsAPI
写FILE *recvf = fopen("/mnt/sdcard/tan_recv.aac","wb");fwrite(stream->buf, 1, stream->len, tfp);fflush(tfp);fclose(tfp);读FILE *tfpv = fopen(datafilename, "rb");FILE *tfpzv = fopen(le...转载 2019-01-06 14:34:39 · 481 阅读 · 0 评论 -
Linux errno详解
1. 错误码 / errnoLinux中系统调用的错误都存储于 errno中,errno由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误。PS: 只有当系统调用或者调用lib函数时出错,才会置位errno!查看系统中所有的errno所代表的含义,可以采用如下的代码:/* Function: obtain the errno string* cha...转载 2019-01-17 11:15:06 · 8780 阅读 · 0 评论 -
linux中对EINTR错误的处理
Linux errno详解。https://blog.youkuaiyun.com/tantion/article/details/86520806----------------------------------------------------------------------------------------------------------慢系统调用(slow system call...转载 2019-01-17 11:20:34 · 767 阅读 · 0 评论 -
c++中堆、栈内存分配
1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量值等。其操作方式类似于数据结构中栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中堆是两回事,分配方式倒是类似于链表,呵呵。 栈:在Windows下,栈是向低地址扩展数据结构,是一块连续内存区域。这句话意思是栈顶地址和栈最大容量是系统预先规定好,在W...转载 2019-01-02 14:42:10 · 154 阅读 · 0 评论 -
C++ 类的静态成员和静态成员函数
我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。先上代码,如何声明,定义静态变量,使用// ************** XXXX.h begin#include <iostream> using namespace std; cla...转载 2019-01-14 10:34:12 · 321 阅读 · 0 评论 -
fd_set
一、winsock中#include <winsock.h>原型int select( int nfds ,fd_set* readfds ,fd_set* writefds ,fd_set* exceptfds ,const struct timeval* timeout );nfds:本参数忽略,仅起到兼容作用。 read...转载 2019-01-14 14:43:35 · 155 阅读 · 0 评论 -
time_t tm timeval 和 时间字符串的转换
1、time_t 精确到秒,timeval精确到微秒,都是以长整数来保存时间timeval中包含time_t这个对象 : tv.tv_sec毫秒: tv.tv_usec/10002、如果想把整数的时间转为时分秒,就要用tm这个结构体。有两个转换方法localtime(线程不安全,容易被覆盖)与localtime_r(线程安全),具体看下文time_t time_seconds ...转载 2019-01-09 10:42:39 · 6139 阅读 · 2 评论 -
Sizeof与Strlen的区别与联系
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,...转载 2019-01-09 11:27:33 · 125 阅读 · 0 评论 -
c++ 容易错的小细节
1、对数组分配的内存进行置 0 ('\0'),因为内存中的值是随机的。在初始化时 char str[800]={0};如果是类的非静态变量,不可以在初始化时置 0,就在构造方法中对其进行置0memset(str, 0, sizeof(str));2、sizeof 这个函数容易产生误用char * parr = new char[10];int len_one = strle...原创 2019-01-09 11:30:41 · 201 阅读 · 0 评论 -
C++ Socket send recv 循环发送和接收 阻塞与缓冲区
重点:socket数据发送与接收问题数据的发送和接收是独立的,并不是发送方执行一次send,接收方就执行以此recv。recv函数不管发送几次,都会从输入缓冲区尽可能多的获取数据。如果发送方发送了多次信息,接收方没来得及进行recv,则数据堆积在输入缓冲区中,取数据的时候会都取出来。换句话说,recv并不能判断数据包的结束位置。send函数: 在数据进行发送的时候,需要先检查输出缓冲区的...转载 2019-01-16 09:51:00 · 4677 阅读 · 1 评论 -
用CMake代替makefile进行跨平台交叉编译
在开始介绍如何使用CMake编译跨平台的静态库之前,先讲讲我在没有使用CMake之前所趟过的坑。因为很多开源的程序,比如png,都是自带编译脚本的。我们可以使用下列脚本来进行编译: 1 2 3 ./configure --prefix=/xxx/xx --enable-static=YES make make install ...转载 2018-12-24 15:47:11 · 1236 阅读 · 0 评论 -
Socket中的bind函数与C++11中的std::bind冲突
该函数是绑定Socket, 而在C++11中增加了std::bind(_Fp &&__f, _BoundArgs &&__bound_args...) 函数, 可以用该函数绑定函数指针, 当在C++类中添加了using namespace std;之后,如果你想调用socket.h中的bind方法则会出现问题, 使得bind函数调用不是你想要的行为。解决方案是在使用...转载 2019-03-15 16:56:58 · 786 阅读 · 0 评论 -
操作系统简介 VxWorks ,Linux
1.VxWorks 是美国 Wind River System 公司( 以下简称风河 公司 ,即 WRS 公司)推出的一个实时操作系统。Tornado 是WRS 公司推出的一套实时操作系统开发环境,类似Microsoft Visual C,但是提供了更丰富的调试、仿真环境和工具。(__VXWORKS_OS__)嵌入式Vxworks系统的主要应用领域主要有以下几方面: 1.数据网络:如:以太网...转载 2018-12-25 11:17:29 · 2773 阅读 · 0 评论 -
简述 LLVM 与 Clang 及其关系 (c++ 编译 文章三)
可以简单理解为 clang编译器的前端,负责解析源代码,检查语法错误,并将其翻译为抽象的语法树(或者简单理解为把代码翻译成中间代码),狭义的llvm是编译器的后端,负责优化中间代码和把中间代码转换为目标机器的代码。和java有点像,生成与系统无法的中间代码,之后在jvm上运行。----------------------------------------------------...转载 2019-01-04 14:28:26 · 715 阅读 · 0 评论 -
C/C++ typedef用法详解(真的很详细)
https://blog.youkuaiyun.com/superhoy/article/details/53504472 第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PC...转载 2018-12-19 11:16:11 · 2878 阅读 · 1 评论 -
小算法
1. 计算一个正整数有多少位,如何把一个正整数一位一位地拆开。注意编程的思维。(c++)void subject11() { //如果是java,直接转为字符串,逆向输出 int x; cin >> x; int n=1; int temp = x; //计算一个正整数有多少位 while ((temp /= 10) > 0) { n++; }...原创 2018-10-16 15:06:43 · 105 阅读 · 0 评论 -
C++ 的浅拷贝和深拷贝
关于浅拷贝和深拷贝这个问题遇上的次数不多,这次遇上整理一下,先说这样一个问题,关于浅拷贝的问题,先从最简单的说起。假设存在一个结构体:struct Student{ string name; int age;};这样一个最简单的问题然后执行: struct Student stu = {"liming", 18}; struct S...转载 2018-11-05 17:53:48 · 140 阅读 · 0 评论 -
C++中int、string等常见类型转换
方法一般,以后修改C++中string、char *、char[]的转换https://www.cnblogs.com/Pillar/p/4206452.html------------------------------------------------------- C++中int、string等常见类型转换1、int型与string型的互相转换最佳实践:int型...转载 2018-11-13 17:07:21 · 672 阅读 · 0 评论 -
线程正常终止pthread_exit,pthread_join,pthread_kill,pthread_cancel,sigwait,sigaddset
int pthread_join(pthread_t thread, void **retval);int pthread_detach(pthread_t thread);void pthread_exit(void *retval); 线程正常终止的方法:1、return从线程函数返回。2、通过调用函数pthread_exit使线程退出3. 线程可以被同一进程中的其...转载 2018-12-21 14:49:13 · 1403 阅读 · 0 评论 -
GNU/Linux (c++ 编译 文章一)
GNU是一个组织,他们发布了一种版权许可协议,GPLGNU本来向开发自己的操作系统——HURD,但是因为种种原因进度非常慢。这时候,一个荷兰黑客制作出了Linux,并宣布:遵循GPL版权可协议。 Linux的发展非常快,他本身遵循GPL版权可协议,同时又把GNU的很多软件集成了进去(注意,Linux仅仅是一个内核,不包含外围的应用程序),所以现在我们使用的Linux系统,应该完整地称之为GNU...转载 2018-12-21 17:18:46 · 455 阅读 · 0 评论 -
c++基本使用教程(多线程)
多线程http://www.runoob.com/cplusplus/cpp-multithreading.html一、子线程方法编写规范:输入参数是(void* args) 返回是 void *例如: void *myWebRtcSendData(void* args) 二、线程正常终止的方法:1、return从线程函数返回(正常执行完函数)。2、通过调用函数pthre...转载 2018-12-18 09:32:50 · 1029 阅读 · 0 评论 -
c++中无名命名空间的使用
在今天看一些源码的时候,无意间发现了 namespace {inline int getValue(int); }类似与这样的用法,虽然学习了这么久的c++,但是真的还是第一次看见然后就在网上查了下关于namespace {}的用法。无名命名空间允许无限定的使用其成员函数,并且为它提供了内部连接(只有在定义的文件内可以使用)命名控件不需要命名,它的成员不需要限定就可以使用。如果...转载 2018-12-18 14:47:39 · 276 阅读 · 0 评论 -
std::List使用总结
排版乱了,看原文 https://blog.youkuaiyun.com/CV_Jason/article/details/83037127List List使用一个doubly linked list(双向串列)管理元素,按惯例,C++标准库并未明定实现方式,只是遵守list的名称、限制和规格。List其实相当于数据结构中的双链表。 使用list时必须先包含头文件#include&l...转载 2018-12-18 15:04:01 · 20238 阅读 · 0 评论 -
指向函数的指针 ------ 函数指针(function pointer)
注意常与typedef配合使用请看下文 用途四https://blog.youkuaiyun.com/tantion/article/details/85091539 ----------------------------------------------------------------------------------函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个...转载 2018-12-29 10:38:26 · 433 阅读 · 0 评论 -
C++ 11 nullptr关键字
熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作。如果暂时不明确该指针指向哪个变量,则需要赋予NULL值。除了NULL之外,C++11新标准中又引入了nullptr来声明一个“空指针”,这样,我们就有下面三种方法来获取一个“空指针”:如下:int *p1 = NULL; // 需要引入cstdlib头文件...转载 2018-12-24 09:22:13 · 216 阅读 · 0 评论 -
Windows安装GNU编译器使用makefile
原文:https://blog.youkuaiyun.com/pdcxs007/article/details/8582559用 gcc 编译 ,用 Makefile 来组织项目--------------------------------------------------------------------------------------------------------Windows...转载 2018-12-24 15:03:09 · 2772 阅读 · 0 评论 -
gcc (GNU编译器套件 ) (c++ 编译 文章二)
GNU/Linux 简介https://blog.youkuaiyun.com/tantion/article/details/85165387-----------------------------------------------------------------GNU编译器套件(GNU Compiler Collection, gcc)包括C、C++、Objective-C、Fortr...原创 2018-12-24 15:09:12 · 1666 阅读 · 0 评论 -
Makefile 使用总结
原文:https://www.cnblogs.com/wang_yb/p/3990952.html用 gcc 编译 ,用 Makefile 来组织项目参考:Windows安装GNU编译器使用makefilehttps://blog.youkuaiyun.com/tantion/article/details/85233550 makefile实战例子:https://blog.csdn...转载 2018-12-24 15:39:21 · 326 阅读 · 0 评论 -
C++ 结构体赋值
一直记得C语言中,结构体是不可以直接赋值的,需要逐一成员赋值或者用memcpy函数。但是在C++中可以(无需重载=运算符),需要区分以下3种情况:#include<iostream>#include<string>using namespace std; struct A { char a[10]; }; struct B { ...转载 2018-12-19 09:09:46 · 13442 阅读 · 1 评论 -
C++内存对齐总结
内存对齐,可以简单理解为每次读取的最小字节数。如果设置为2#pragma pack(2)一个char 也可能占两个字节#pragma pack(1)typedef struct tagTcpPacketHeader{ unsigned int uiDataLen; //包体的长度=包头长度+数据长度 unsigned char tcsVersion; ...转载 2019-03-18 11:29:17 · 233 阅读 · 0 评论