C和C++
文章平均质量分 61
C和C++技术为主
QtHalcon
大学一直做嵌入式和音视频方向的开发,熟悉Linux,毕业转到了CV方向,现在在深圳从事计算机视觉的工作。
展开
-
C#脚本CSharpScript
使用CSharpScript来调用C#脚本原创 2022-08-03 17:13:06 · 3610 阅读 · 1 评论 -
C#和DL-EPI通信
DL-EP1是通过Ethernet/IP通信的,较为复杂,不想折腾建议换成DL-EN1,可以直接用TCP发送M0就能获取传感器的值。 如果实在要通信就用下面的库。GitHub - rossmann-engineering/EEIP.NET: Ethernet/IP compatible library for .NET implementationshttps://github.com/rossmann-engineering/EEIP.NET 选择...原创 2022-03-23 17:11:45 · 3360 阅读 · 11 评论 -
C语言位段
有时,存储1个信息不必占用1个字节,只需二进制的1个(或多个)位就够用。如果仍然使用结构类型,则造成内存空间的浪费。为此,C语言引入了位段类型。位段的概念与定义所谓位段类型, 是一种特殊的结构类型,其所有成员均以二进制位为单位定义长度,并称成员为位段。例如,CPU的状态寄存器,按位段类型定义如下:struct status{ unsigned sign:1;/*符号标志*/ unsigned zero:1;/*零标志*/...原创 2022-03-07 16:55:43 · 451 阅读 · 0 评论 -
C语言常用的宏定义
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用的宏定义。1. 防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H//头文件内容#endif2. 重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedef unsigned char boolean; /* Boolean value type. */typedef unsigned l原创 2021-06-15 21:45:23 · 556 阅读 · 32 评论 -
如何在ARM下进行高效的C编程?
通过一定的风格来编写C程序,可以帮助C编译器生成执行速度更快的ARM代码。下面就是一些与性能相关的关键点:原创 2021-06-12 09:00:14 · 620 阅读 · 23 评论 -
C语言和其他高级语言的最大的区别是什么?
提到C语言,我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的!我们需要知道——变量,其实是内存地址的一个抽像名字罢了。在静态编译的程序中,所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字的,只知道地址。内存的使用是程序设计中需要考虑的重要因素之一,这不仅由于系统内存是有限的(尤其在嵌入式系统中),而且内存分配也会直接影响到程序的效率。因此,我们要对C语言中的内存管理,有个系统的了解。在C语言中,定义了4个内存区间:代码区;全局变量和静态变量区;局...原创 2021-06-04 20:09:03 · 460 阅读 · 43 评论 -
gets需要用getchar吃掉换行符
当我们先输入一个整型类的数后,再用gets输入一个字符串,在这之间会出现问题。#include"stdio.h"int main(){ char a[1000]; int n; scanf("%d",&n); printf("接收\n"); gets(a); printf("输出:%s\n", a); ...原创 2018-11-14 09:05:59 · 4131 阅读 · 0 评论 -
复制一段字符串作为程序输入的BUG
有时候我们会通过从其他地方复制一段字符串(里面有多行语句)作为程序的输入,这时换行符会出出现一些问题。比如下面的程序:#include <stdio.h>#include <string.h>#define N 100int main(){ char input_1[N] = {0}; char input_2[N] = {0}; printf...原创 2018-11-14 08:17:40 · 214 阅读 · 0 评论 -
windows未指定字符数组大小的BUG
#include <stdio.h>intmain(void){ char a[] = "123456789"; char b[] = "123"; printf("&a = [%ld] , &b = [%ld]\n", a, b); strcpy(b, a); printf("&a = [%ld] , &b = [%ld原创 2018-10-02 09:23:26 · 242 阅读 · 0 评论 -
GCC——函数的局部变量的bug
之前写一个代码,出现莫名奇妙的问题,找了半天,结果发现时GCC的BUG问题:在一个程序中,a函数和b函数中定义了相同变量c,a函数给变量赋值了,b函数没赋值结果:在b函数中调用c,其实是调用了a函数的变量c当发现这个问题时,我也感觉莫名其妙,我猜想时编译器的问题,主要是在变量存储方面以下是代码:#include <stdio.h>#include...原创 2018-09-19 22:21:56 · 378 阅读 · 0 评论 -
C/C++遍历目录下的所有文件
1. 遍历某个目录下的所有文件遍历某个目录下的所有文件,并输出文件名和文件大小。#include <iostream>#include <cstring>#include <windows.h>void listFiles(const char * dir);int main(){ using namespace std; ...原创 2018-12-12 13:35:17 · 2809 阅读 · 2 评论 -
Windows API实现文件操作
转载:http://blog.csdn.net/virtualdesk/article/details/4379704下面是windows中提供的对于文件进行操作的API函数及其功能: Windows API函数 功能 CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通...转载 2018-12-12 13:26:23 · 516 阅读 · 0 评论 -
win10下运行exe文件
习惯了在集成开发环境下运行代码,如果脱离后该如何运行exe 文件第一种方法;1、找到编译好了exe文档。2、使用shift键的同时使用鼠标在文件夹内的空白区域中单击右键,这样一来系统就会自动弹出新窗口了。3、在新窗口中单击“在此处打开命令窗口”,系统会弹出如下图所示的窗口,在界面中输入程序的名称并按下回车键。系统会将运行的结果展示在输入的名称下方。第二种方法:1...原创 2018-12-12 13:22:05 · 9185 阅读 · 2 评论 -
Libuv
Libevent、libev、libuv三个网络库,都是c语言实现的异步事件库libevent :名气最大,应用最广泛,历史悠久的跨平台事件库; libev :较libevent而言,设计更简练,性能更好,但对Windows支持不够好; libuv :开发node的过程中需要一个跨平台的事件库,他们首选了libev,但又要支持Windows,故重新封装了一套,linux下用libev实现,Windows下用IOCP实现;功能由epoll,kqueue,IOCP和事件端口支持的功能齐全的..原创 2020-11-30 14:27:35 · 3054 阅读 · 0 评论 -
C++11后置返回类型
C++11新标准增加的auto不仅可以自动推断变量类型,还能结合decltype来表示函数的返回值。这些新特性可以让我们写出更简洁、更现代的代码。在泛型编程中,可能需要通过参数的运算来得到返回值的类型。我们看一下下面这个例子:#include<iostream>using namespace std;template <typename R,typename T, typename U>R add(T t,U u){ return t+u;}int原创 2020-10-05 23:10:03 · 486 阅读 · 0 评论 -
自己实现一个nullptr
由于在C++中NULL定义为0,C++中不能将void *类型的指针隐式转换成其他指针类型,而又为了解决空指针的问题,所以C++中引入0来表示空指针,而又因为NULL不能提醒程序员它是一个整数0而不是一个指向0的空指针,所以又引入了nullptr。#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif1 实现代码const class nullptr_t{public: templa.原创 2020-08-28 20:39:05 · 736 阅读 · 0 评论 -
好吧我摊牌了,这是C++最好的5 个网站
相对其他语言来说,C++ 算是难度比较高的了,这一点无法否认。但是如果能有一些好的网站,则会让 C++ 的学习事半功倍。那就来介绍几个最常用的(最好的)吧,包含了参考手册、教程、框架/库列表......1.cppreference网址:https://en.cppreference.com/w/cppreference 即 C++ 参考手册,这个网站始终是我的首选,因为它...原创 2020-03-11 09:05:41 · 3608 阅读 · 1 评论 -
Linux常用内核宏
计算向向上取整的商由于两数相除,默认是向下取整,而这里是向上取整数#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))参考:https://www.cnblogs.com/cmembd/p/3493597.html计算向下取整的整数倍数如:m = 5 n = 3,3的整数倍有3,6,9,12,但是对于5向下取整为3解...原创 2019-08-07 14:11:45 · 2954 阅读 · 0 评论 -
c++ 智能指针
https://www.cnblogs.com/TenosDoIt/p/3456704.htmlhttps://blog.csdn.net/tanswer_/article/details/79039617原创 2018-11-28 18:27:01 · 212 阅读 · 0 评论 -
什么是幻数?
转载:https://blog.csdn.net/xieyihua1994/article/details/51578325/什么是幻数?黑色印记对于什么幻数?初学者肯定都不清楚,也很迷惑。但它却时时刻刻出现在我们的身边。只是我们并没有去在意它。话不多说,首先让我向大家解释一下C语言中的幻数是什么。幻数:就是具体的数,反映不出数字所代表的意义。 仅仅只是文字的表达,...转载 2018-08-30 14:36:13 · 6584 阅读 · 0 评论 -
用宏定义字节对齐
有时候我们需要对一个数字节对齐。实例代码:#include <stdio.h>#define CEILING_2_POWER(x,a) ( ((x) + ((a) - 1) ) & ( ~((a) - 1) ) )//字节对齐#define A(x,a) ((x) + ((a) - 1) )//先加#define B(x,a) ( ...原创 2019-04-08 19:24:16 · 1852 阅读 · 0 评论 -
C语言宏定义高级用法
特殊符号#### “##”是一种分隔连接方式,它的作用是先分隔,然后进行强制连接。 在普通的宏定义中,预处理器一般把空格解释成分段标志,对于每一段和前面比较,相同的就被替换。但是这样做的结果是,被替换段之间存在一些空格。如果我们不希望出现这些空格,就可以通过添加一些##来替代空格。#define TYPE1(type,name) type name_##type##_ty...原创 2019-03-06 10:41:02 · 4185 阅读 · 0 评论 -
C 库函数vprintf
描述C 库函数 int vprintf(const char *format, va_list arg) 使用参数列表发送格式化输出到标准输出 stdout。其实printf和scanf一系列,有很多函数int printf(const char *format, ...);int fprintf(FILE *stream, const char *format, ...);int...原创 2018-09-10 19:39:48 · 1953 阅读 · 0 评论 -
#include 和#include "filename.h"有什么区别?
正确答案:#include < filename.h>,编译器从标准库路径开始搜索filename.h#include "filename.h",编译器从用户的工作路径开始搜索filename.h. 题目解析:使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境变量时设置的),而不在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未...原创 2018-09-09 12:55:40 · 801 阅读 · 0 评论 -
strlen和sizeof的区别
一:当没有指定字符数组的大小时如:char buf [ ] = {"12345\n"};strlen(buf) 等于 6sizeof(buf) 等于 6二:当指定字符数组的大小时如:char buf [BUFSIZE] = {"12345\n"}; //BUFSIZE = 20;strlen(buf) 等于 6sizeof(buf) 等于 20...原创 2018-09-09 08:30:40 · 261 阅读 · 0 评论 -
for(;;)和while(true)的区别
再看JDK源码的时候发现,“死循环”有两种写法:for(;;)和while(true),我就疑问,两者有啥区别,有啥源码中多数是for( ; ; )这种形式的,编译前 编译后 while (1); mov eax,1 test eax,eax ...原创 2018-09-08 14:52:07 · 1091 阅读 · 0 评论 -
为什么要字节对齐?
转载:https://blog.csdn.net/zkf11387/article/details/7662450文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就...转载 2018-08-16 18:05:31 · 2323 阅读 · 0 评论 -
学习网站
易百教程网:https://www.yiibai.com/kernel下载:https://mirrors.edge.kernel.org/pub/linux/kernel/https://www.kernel.org/安卓镜像:https://www.jianshu.com/p/367f0886e62b原创 2018-08-16 16:10:45 · 185 阅读 · 0 评论 -
C语言之 “可重入函数”
重入,可理解为重新进入。 一般使用全局变量或static变量的都是不可重入变量,因为本来A程序要用a变量,结果被B程序拿走了a,然后修改了它的值,这时A程序再用a,得到的就不是它想要的值了。 就像水流,有一直向前流的,也有分叉的。全局变量、静态变量等被几个函数同时使用,即共享时就相当于分叉,这时我们就需要保证信号流向不分叉即可。主要用于多任务环境中,一个可重入的函数简单来说就是...原创 2018-08-16 14:44:56 · 3956 阅读 · 0 评论 -
DEBUG() __FILE__,__LINE__ 代替 printf
转载:https://blog.csdn.net/yu704645129/article/details/50461311#if(...._DEBUG)#define Y_DBG(fmt,args...) printf("=====> %s(%d): %s() "#fmt"\n",__FILE__,__LINE__,__func__,##args)#else#define Y_D...转载 2018-08-14 14:35:10 · 2356 阅读 · 0 评论 -
C语言类型转换
1.自动转换 如:1+'2' //字符2转为502.隐式转换 如:int a;char b = a;3.强制转换 如:char a = (int)'2'一:自动转换当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型,然后进行操作,转换规则是由低级向高级转换。转换规则如下图所示:二:隐式转换(1)相同数据类型之间的转换1.有符号数据类型————》...原创 2018-09-10 23:13:25 · 409 阅读 · 0 评论 -
Linux内核中的常用宏container_of
Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。 Container_of的定义如下: #define container_of(ptr, type, member) ({ \ const ty...原创 2018-10-07 19:01:13 · 244 阅读 · 0 评论 -
数组指针和指针数组
指针数组:int *a[5];数组指针:int (*a)[5];指针数组的元素都是int *类型数组指针的类型都是int 类型数组指针的正确用法:int a[2][3]; //二维数组int (*p)[3]; //列元素为3个的数组指针p = a;问1:为啥数组指针要指定列大小问2:能否把 二维数组名 赋值 给二维指针int a[2][3];int *...原创 2018-10-08 16:23:18 · 377 阅读 · 0 评论 -
C++ 标准输入,标准输出,标准错误和标准日志
C++ 标准库提供了一组丰富的输入/输出功能,我们将在后续的章节进行介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。I/O 库头文件下列的头文件在 C++ 编程...原创 2019-02-24 22:17:22 · 3617 阅读 · 0 评论 -
C++归纳总结
【1】我的程序里用了全局变量,但为什么进程正常停止的时候会莫名其妙的core掉Rule:C++在不同模块(源文件)里定义的全局变量,不保证构造顺序;但保证在同一模块(源文件)里定义的全局变量,按定义的先后顺序构造,按定义的相反次序析构。我们程序在a.cpp里定义了依次全局变量X和Y;按照规则:X先构造,Y后构造;进程停止执行的时候,Y先析构,X后析构;但如果X的析构依赖于Y,那么cor...转载 2019-02-27 16:22:17 · 226 阅读 · 0 评论 -
文本流和二进制流
文本流和二进制流 我们在写C程序的时候经常会涉及到对流的操作,比如说从标准输入流读取一串字符串,然后通过标准输出流输出显示在屏幕上,这也就是所谓的IO操作。那么流究竟是什么东西?下面首先对流这个概念做一下解释。 一. 流(stream)的概念计算机有很多外部设备,比如键盘、鼠标、CD-ROM驱动器、硬盘、网络接口、视频适配器等。这些设备都和IO操作有关系,而每种设备都具有不同的...原创 2019-02-08 16:23:51 · 3765 阅读 · 0 评论 -
STD常用算法
Functions in <algorithm>Non-modifying sequence operations:all_of Test condition on all elements in range (function template )any_of Test if any element in range fulfills condition (fun...原创 2019-01-31 16:08:00 · 1722 阅读 · 0 评论 -
C++ 命名空间namespace
C++ 命名空间假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。因此,...原创 2019-01-23 21:30:59 · 232 阅读 · 0 评论 -
不要用memcmp比较结构体
比较两个结构体时, 若结构体中含有大量的成员变量, 为了方便, 程序员往往会直接使用memcmp对这两个结构体进行比较, 以避免对每个成员进行分别比较。 这样的代码写起来比较简单, 然而却很可能深藏隐患。 请看下面的示例代码: #include <stdio.h>#include <stdlib.h>#include <string.h>typed...原创 2018-12-01 16:53:39 · 4355 阅读 · 0 评论 -
GNU C的特色:__attribute__机制
https://blog.csdn.net/JuanA1/article/details/6849120 https://blog.csdn.net/fantasy_wxe/article/details/8066551?utm_source=blogxgwz7http://www.unixwiz.net/techtips/gnu-c-attributes.htmlhttps://...原创 2018-11-27 22:15:25 · 227 阅读 · 0 评论