c/c++语言
文章平均质量分 76
juruiyuan111
这个作者很懒,什么都没留下…
展开
-
open(/dev/ietctl, O_RDWR) 参数含义(转载)
这是文件I/O的常用函数,open函数,open函数用来打开一个设备,他返回的是一个整型变量,如果这个值等于-1,说明打开文件出现错误,如果为大于0的值,那么这个值代表的就是文件描述符。一般的写法是if((fd=open("/dev/ttys0",O_RDWR | O_NOCTTY | O_NDELAY)<0){perror("open");}这个事常用的一种用法fd是设备描述符,linux在操作硬件设备时,屏蔽了硬件的基本细节,只把硬件当做文件来进行操作转载 2022-06-25 16:31:04 · 3114 阅读 · 0 评论 -
__builtin_函数
二进制相关,但不知道是哪个库的__builtin_ffs(x)返回 x 的最后一位 1 是从后向前第几位__builtin_clz(x)返回 x 二进制下前导 0 的个数__builtin_ctz(x)返回 x 二进制下末尾 0 的个数__builtin_popcount(x)返回 x 二进制下 1 的个数__builtin_parity(x)返回 x 的 1 的个数的奇偶性...原创 2022-04-07 16:55:12 · 528 阅读 · 0 评论 -
C语言calloc()函数:分配内存空间并初始化和malloc区别
calloc() 函数用来动态地分配内存空间并初始化为 0,其原型为: void* calloc (size_t num, size_t size);calloc() 在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。【返回值】分配成功返回指向该内存的地址,失败则返回 NULL。如果 size 的值为 0,那么返回值会因标准库实现的不同而不同,可能是 NULL,也...原创 2021-12-08 10:45:07 · 625 阅读 · 0 评论 -
C++11新增alignas关键字作用
alignas关键字用来设置内存中对齐方式,最小是8字节对齐,可以是16,32,64,128等。下面先写个alignas对齐的实际代码,等下再来说为什么会这样。alignas数据对齐测试代码C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22..原创 2021-10-14 13:47:51 · 258 阅读 · 0 评论 -
C中的预编译宏定义
在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏(macro)"进行处理.C初学者可能对预处理器没什么概念, 这是情有可原的: 一般的C编译器都将预处理, 汇编, 编译, 连接过程集成到一起了. 编译预处理往往在后台运行. 在有的C编译器中, 这些过程统统由一个单独的程序来完成, 编译的不同阶段实现这些不同的功能. 可以指定相应的命令选项来执行这些功能. ...原创 2021-08-24 17:30:24 · 516 阅读 · 0 评论 -
C++11 Lambda表达式(匿名函数)详解
使用STL时,往往会大量用到函数对象,为此要编写很多函数对象类。有的函数对象类只用来定义了一个对象,而且这个对象也只使用了一次,编写这样的函数对象类就有点浪费。而且,定义函数对象类的地方和使用函数对象的地方可能相隔较远,看到函数对象,想要查看其 operator() 成员函数到底是做什么的也会比较麻烦。对于只使用一次的函数对象类,能否直接在使用它的地方定义呢?Lambda 表达式能够解决这个问题。使用 Lambda 表达式可以减少程序中函数对象类的数量,使得程序更加优雅。Lambda 表达式的...原创 2021-12-02 10:34:30 · 108 阅读 · 0 评论 -
聚合类型与POD类型
Lippman在《深度探索C++对象模型》的前言中写道:I have heard a number of people over the years voice opinions similar to those of your colleagues. In every case, those opinions could be attributed to a lack of factual knowledge about the C++ language. Just last week I wa..原创 2021-08-03 14:27:21 · 466 阅读 · 0 评论 -
C++中using的三种用法
1、导入命名空间C++命名空间namespace的理解使用C++在写不同的功能模块时,为了防止命名冲突,建议对模块取命名空间,这样在使用时就需要指定是哪个命名空间。使用 using 导入命名空间,即使一个命名空间中的所有名字都在该作用域中可见,常见的如下:// 导入整个命名空间到当前作用域using namespace std;// 只导入某个变量到当前作用域 using std::cout; 在.h头文件中,一般不应该使用using声明。因为头文件的内容会拷贝...原创 2021-07-14 14:01:25 · 2450 阅读 · 0 评论 -
C99标准的新特性
C语言标准的发展C语言的发展历史大致上分为4个阶段:Old Style C、C89、C99和C11.C89是最早的C语言规范,于1989年提出,1990年先由ANSI(美国国家标准委员会,American National Standards Institute)推出ANSI版本,后来被接纳为ISO国际标准(ISO/IEC9899:1990),因而有时也称为C90,最经典的C语言教材[K&R]就是基于这个版本的,C89是目前最广泛采用的C语言标准,大多数编译器都完全支持C89,C99(I..原创 2021-07-01 11:59:41 · 850 阅读 · 0 评论 -
C++11使用using定义别名(替代typedef)
大家都知道,在C++中可以通过 typedef 重定义一个类型:typedef unsigned int uint_t;被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。因此,下面这样将不是合法的函数重载:void func(unsigned int);void func(uint_t); // error: redefinition使用 typedef 重定义类型是很方便的,但它也有一些限制,比如,无法重定义一个模板。想象下面这个场景:typedef st...原创 2021-04-15 14:43:42 · 316 阅读 · 0 评论 -
defined 用法
这就是#if defined 的唯一作用!1) #if defined XXX_XXX#endif 是条件编译,是根据你是否定义了XXX_XXX这个宏,而使用不同的代码。一般.h文件里最外层的#if !defined XXX_XXX#define XXX_XXX#endif 是为了避免.h头文件被重复include。2) #error XXXX 是用来产生编译时错误信息XXXX的,一般用在预处理过程中;例子:#if ...原创 2021-04-06 17:37:37 · 2214 阅读 · 0 评论