随笔分类 -  C_CPP

摘要:用C++写代码的时候总是避免不了处理错误,一般来说有两种方式,通过函数的返回值或者抛出异常。C语言的错误处理一律是通过函数的返回值来判断的,一般是返回0、NULL或者-1表示错误,或者直接返回错误代码,具体是哪种方式没有统一的规定,各种API也各有各的偏好。譬如fopen函数,当成功时返回文件指针, 阅读全文
posted @ 2021-06-02 22:21 yuxi_o 阅读(1031) 评论(0) 推荐(0) 编辑
摘要:一直想开发一款串口调试助手软件,更确切的说是需要了解串口调试助手怎样设计的。 最近做windows串口编程时搜索到一些开源的,简单记录如下: 1. https://github.com/movsb/common win32平台串口调试助手 https://blog.twofei.com/566/ 开 阅读全文
posted @ 2019-12-14 23:00 yuxi_o 阅读(730) 评论(0) 推荐(0) 编辑
摘要:目前,Windows下的定时器编程主要有三种方式。 1)SetTimer定时器是利用Windows窗口消息WM_TIMER来实现的。使用方法非常简单,SetTimer创建定时器,KillTimer销毁定时器。使用条件是调用线程必须要有窗口消息队列message queue,因此如果是工作线程就无法使 阅读全文
posted @ 2019-12-10 19:42 yuxi_o 阅读(2043) 评论(0) 推荐(0) 编辑
摘要:linux要在windows下编译运行,需要win下的gcc编译器,一般有两种:MinGW和Cygwin。 但某些函数在windows没有,即使使用两种工具也编译不过,需要查询windows函数并使用,例如网路socket等。 MinGW参考: MinGW安装教程( MinGW - Minimali 阅读全文
posted @ 2019-12-08 18:45 yuxi_o 阅读(1423) 评论(0) 推荐(0) 编辑
摘要:1. gRPC简述 RPC,远程方法调用,就是像调用本地方法一样调用远程方法。 gRPC是Google实现的一种RPC框架,基于HTTP/2标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。目前提供 C、Java 阅读全文
posted @ 2019-11-03 16:23 yuxi_o 阅读(15369) 评论(0) 推荐(2) 编辑
摘要:1. 静态库和动态库 1.1 静态库(.lib) 函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE文件)。当发布产品时,只需要发布这个可执行文件,并 阅读全文
posted @ 2019-09-05 21:25 yuxi_o 阅读(2141) 评论(0) 推荐(1) 编辑
摘要:一、概述 STL(标准模板库),是目前C内置支持的library,底层利用了C类模板和函数模板的机制,广义上由三大部分组成:容器、算法和迭代器。 STL大体分为六大组件,分别是容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。 容器:各种数据结构,如vector、list、deque、set 阅读全文
posted @ 2018-10-07 09:00 yuxi_o 阅读(322) 评论(0) 推荐(0) 编辑
摘要:1. 基础 处理错误有两种方式返回值和异常,C语言是典型的返回值凡是,C++包含两种。 返回值处理错误缺点: 程序员经常「忘记」处理错误返回值 每个可能产生错误的函数在调用后都需要判断是否有错误 与「真正的」返回值混用,需要规定一个错误代码(通常是0、-1或NULL) 异常处理错误的缺点: 使控制流 阅读全文
posted @ 2018-09-09 22:05 yuxi_o 阅读(686) 评论(0) 推荐(0) 编辑
摘要:友元 类的友元函数是定义在类外部,但有权访问类的所有私有成员和保护成员。友元函数需要在类中声明,但是友元函数不属于成员函数。 友元的关键字是friend。 友元函数有三种实现:全局函数做友元,类做友元和成员函数做友元。 哪些全局函数、成员函数或类作为类的友元是由类定义的(在类内部声明),而不能从外部 阅读全文
posted @ 2018-09-09 21:49 yuxi_o 阅读(244) 评论(0) 推荐(0) 编辑
摘要:泛型编程是独立于任何特定类型的方式编写代码。模板是泛型编程的基础,模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了大规模的软件开发。 模板提供通用类型和通用函数,定义中包含template,和一对尖括号<>,尖括号里面是模板参数。模板参数与普通参数的区别在于,模板参数不仅可 阅读全文
posted @ 2018-09-09 15:33 yuxi_o 阅读(778) 评论(0) 推荐(0) 编辑
摘要:0. 如果没有指明访问限定符(public,private),class中默认的private,而struct中的成员默认是public的。 #include <iostream> using namespace std; int main() { cout<<"Hello world"<<endl 阅读全文
posted @ 2018-09-09 14:16 yuxi_o 阅读(372) 评论(0) 推荐(0) 编辑
摘要:C++面向对象的三大特性:封装,继承,多态。 封装:使用一整套方法去创建一个新的类型,这叫类的封装。 继承:从一个现有的类型基础上,稍作改动,得到一个新的类型的方法,叫类的继承。 多态:当有几个不同的子类对象时,对象调用的函数会依据对象类型来调用相应类型的成员函数。 1. 继承 继承的主要目的是为了 阅读全文
posted @ 2018-09-09 14:10 yuxi_o 阅读(507) 评论(0) 推荐(0) 编辑
摘要:C++面向对象的三大特性:封装,继承,多态。封装:使用一整套方法去创建一个新的类型,这叫类的封装。 拷贝构造函数、赋值构造函数和析构函数是类最重要的函数,被称为The Big Three。 与其他成员函数相比,The big three特殊之处在于,如果代码中没有提供这些函数的实现,C++编译器自动 阅读全文
posted @ 2018-09-09 12:14 yuxi_o 阅读(933) 评论(0) 推荐(0) 编辑
摘要:一、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设 阅读全文
posted @ 2018-09-09 09:51 yuxi_o 阅读(397) 评论(0) 推荐(0) 编辑
摘要:1. Clang的AddressSanitizer AddressSanitizer是clang中的一个内存错误检测器,它可以检测到以下问题: Out-of-bounds accesses to heap, stack and globals Use-after-free Use-after-ret 阅读全文
posted @ 2018-08-25 19:17 yuxi_o 阅读(698) 评论(0) 推荐(0) 编辑
摘要:简述 linux下异步方式有两种:异步通知和异步IO(AIO),异步通知请参考:linux异步通知 Linux的I/O机制经历了一下几个阶段的演进: 1. 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。 2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NO 阅读全文
posted @ 2018-07-21 16:30 yuxi_o 阅读(4450) 评论(0) 推荐(0) 编辑
摘要:函数原型 两函数都用到struct msghdr: msg_name and msg_namelen specify the source address if the socket is unconnected; msg_name may be given as a NULL pointer if 阅读全文
posted @ 2018-06-23 22:36 yuxi_o 阅读(679) 评论(0) 推荐(0) 编辑
摘要:分散/聚集 I/O是一种可以在单次系统调用中对多个缓冲区输入输出的方法,可以把多个缓冲区的数据写到单个数据流,也可以把单个数据流读到多个缓冲区中。其命名的原因在于数据会被分散到指定缓冲区向量,或者从指定缓冲区向量中聚集数据。这种输入输出方法也称为向量 I/O(vector I/O)。与之不同,标准读 阅读全文
posted @ 2018-06-23 22:19 yuxi_o 阅读(1974) 评论(0) 推荐(0) 编辑
摘要:应用层使用timer可以启动多个timer(每个timer管理一个目标时间),也可启用一个timer来管理多个目标时间。 多个timer时每个timer占用一部分空间,且存在多个timer同时到期的先后顺序问题(未多考虑,是否有问题待确定),可采用单个timer管理程序所有定时事件,即如何实现序列化 阅读全文
posted @ 2018-05-26 19:02 yuxi_o 阅读(307) 评论(0) 推荐(0) 编辑
摘要:应用层除了通过setitimer/getitimer设置获取timer外,还可通过timer_create()等一系列函数实现应用层timer功能。 应用流程 The timers created by timer_create() are commonly known as "POSIX (int 阅读全文
posted @ 2018-05-26 18:50 yuxi_o 阅读(373) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示