C/C++
文章平均质量分 90
springcrazy
这个作者很懒,什么都没留下…
展开
-
浅析长度为0的数组
浅析长度为0的数组Part1转自:http://my.oschina.net/u/176416/blog/33054 长度为0的数组在标准c和c++中是不允许的,如果使用长度为0的数组,编译时会产生错误,提示数组长度不能为0。但在GNUc中,这种用法却是合法的。它的最典型的用法就是位于数组中的最后一项,如上面所示,这样做主要是为了方便内存缓冲区的管理。如果你将上面的长度为0的数组换为指针,那么在分配内存时,需采用两步:首先,需为结构体分配一块内存空间;其次再为结构体中的成员变量分配内存...转载 2021-03-16 19:36:57 · 646 阅读 · 0 评论 -
C 指定元素初始化方法 指定初始化器
指定初始化器的概念C90 标准要求初始化程序中的元素以固定的顺序出现,与要初始化的数组或结构体中的元素顺序相同。但是在新标准 C99 中,增加了一个新的特性:指定初始化器。利用该特性可以初始化指定的数组或者结构体元素。数组的指定初始化器#一维数组的指定初始化器#利用指定初始化器的特性,我们可以这样定义并初始化一个数组:int a[6] = {[4] = 10,[2] = 25}; 上述的初始化就等同于如下方式:int a[6] = {0,0,25,0,10,0}; 可以看到通转载 2021-01-21 11:23:00 · 413 阅读 · 0 评论 -
sizeof是预处理指令吗
我们知道,sizeof是在编译期就完成了计算,在运行时已经是一个常数值了。那sizeof能用在类似于#if这样的指令中吗?答案一般是不行。关于预编译条件MSDN明确写着: The expression cannot use sizeof or a type-cast operator.其实,像#include,#if,#define等等这样的是在预处理过程就完成了包含和替换,所以他们是预处理指令。而此时还没有到编译期,还没有类型名称分析,sizeof也就不能用。...转载 2020-09-17 16:25:22 · 896 阅读 · 0 评论 -
____cacheline_aligned和____cacheline_aligned_in_smp
这两个都属于GCC扩展函数。____cacheline_alignedinstructs the compiler to instantiate a struct or variable at an address corresponding to the beginning of an L1 cache line, for the specific architecture, i.e., so that it is L1 cache-line aligned.____cacheline_al...转载 2020-09-08 13:34:53 · 643 阅读 · 0 评论 -
2020-09-03
The following is the most common method for checking if file exist:#include <sys/stat.h>bool FileExist(const char* FileName){ struct stat my_stat; return (stat(FileName, &my_stat) == 0);}//Example Usageint main(int argc, char* a转载 2020-09-03 18:30:37 · 89 阅读 · 0 评论 -
C print format 格式
%d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %0 无符号以八进制表...转载 2020-08-28 10:34:05 · 582 阅读 · 0 评论 -
#error 、 #line 和 #pragma 的使用
1. #error的用法(1)#error是一种预编译器指示字,用于生成一个编译错误消息(2)用法:#errormessage//注意:message不需要用双引号包围(3)#error编译指示字用于自定义程序员特有的编译错误消息。类似的,#warning用于生成编译警告消息(4)#error可用于提示编译条件是否满足。编译过程中的任何错误意味着无法生成最终的可执行程序2. #line的用法(1)#line用于强制指定新的行号和编译文件名,并对源程序的代码重新编...转载 2020-08-06 09:57:14 · 174 阅读 · 0 评论 -
C条件编译
C条件编译在 C 语言中,条件编译指令可以实现源代码的部分编译功能,可以根据表达式的值或者某个特定的宏来确定编译条件,以决定编译哪些代码,不编译哪些。使用“#ifndef / #define / #endif”防止头文件被重复引用在 C 语言中,一个文件中可以包含多个头文件,而头文件之间又是可以相互引用的,这将引起一个文件中可能间接多次包含某个头文件,从而导致了某些头文件被重复引用多次。例如,有 3 个文件 a.h、b.h 和 c.h,其中 b 文件中包含了 a.h,而 c 文件中又分别包含.转载 2020-08-06 09:24:44 · 216 阅读 · 0 评论 -
数组越界引起的异常
一、引言 在提供给客户的bin档突然在最新版就不能用了,而客户提供的出错log 跟bin 档本身的功能却一点也关系,最后只能一点点回退修改的代码来排除,最终定位的问题确实数组越界导致的异常。二、问题追溯 在当前的案例中,我们会提供一个bin档给客户,客户使用我们提供的API 接口通过UART 加载外置的DSP。同时为了追溯bin档的版本号,定义了一个接口来获得加载...原创 2020-04-13 09:43:32 · 3056 阅读 · 0 评论 -
检测是否存在多个bit被置位
在阅读bluedroid source code时, 其实的一个函数还挺有意思,他的作用是用来检测一个变量中的bit置位情况:0个,1个还是多个,原理挺简单,直接上代码,相应的也让我回忆起LeetCode 也有类似的题目。/* the return values from A2D_BitsSet() */#define A2D_SET_ONE_BIT 1 /* one ...原创 2020-04-02 23:24:27 · 625 阅读 · 0 评论 -
零长度数组
Arrays of Length Zero Declaring zero-length arrays is allowed in GNU C as an extension. A zero-length array can be useful as the last element of a structure that is really a header for a variable-le...翻译 2020-03-14 08:13:01 · 513 阅读 · 0 评论 -
回归基础 —— 指针和数组的定义与声明
一、序之前在编程中时刻谨记数组或者字符的申明和定义要保持一致,即/*数组定义与声明*/// file.cchar arr[] = "abcdef"; //file.hchar arr[];/*指针定义与声明*/// file.cchar *arr = "abcdef";//file.hchar *arr;但其中的缘由也一直没有去想、去像清楚,今天看到一篇文章h...原创 2020-03-09 11:09:16 · 106 阅读 · 0 评论 -
面向对象 C的一种实现方式
摘要https://dmitryfrank.com/articles/oop_in_c的关键内容,做一下笔记~一.类的封装通过结构体封装类,将私有变量放入结构体中。每一个结构体变量对应一个对象,提供setter / getter / helper 函数操控对象,在这些函数中第一个参数为指向结构体(对象)的指针。示例:// .h file #ifndef _CRC...原创 2020-03-05 23:39:08 · 165 阅读 · 0 评论 -
文件I/O和标准I/O的区别
一、先来了解下什么是文件I/O和标准I/O:文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linix或unix平台。标准I/O:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的...转载 2020-02-17 11:32:06 · 343 阅读 · 0 评论 -
ANSI I/O 库函数总结
ANSI 的I/O函数库的类别和变种很多, 这边以功能为区分,并以表格的形式对各函数进行分类,希望可以起到区分和记忆的目的。各个函数的说明可以参见http://man7.org/linux/man-pages/index.html目的 可用于所有的流 只用于stdin和stdout 内存中的字符串 文件打开/关闭 fopen,fclose [除去标准...原创 2020-02-17 11:27:07 · 151 阅读 · 0 评论 -
有限状态机编程方法
在编程中经常会碰到根据当前的状态和到来的事件(ex:key event ,packet 到来)来执行不同的动作,使用有限状态机编程是一种非常简洁明了的方式。该种方式大概的思想是:状态机FSM会维护某种状态(stateful protocol ),根据到来的事件和当前FSM 处于的状态,FSM 会做出不同的响应并切换到下一状态(或保持当前状态),从而实现相应的业务逻辑。 ...原创 2020-02-14 17:21:40 · 468 阅读 · 0 评论 -
assert()使用
一、什么是assert()?编写代码时,我们总是会做出一些假设,断言(assert)就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。注意:assert(...转载 2020-02-14 00:14:58 · 848 阅读 · 0 评论 -
遇到指针别害怕!先把这篇笔记看一遍~
指针在C语言中是一块很重要的内容,也是比较难理解的一块内容,我们需要反复学习反复巩固才可以对其有所了解。之前也分享过指针相关的笔记,但是都比较杂,本篇笔记汇总一下指针相关的内容,包含了挺多指针相关的基础知识点。笔记有点长,可以收藏下来慢慢阅读。复杂类型说明以下这部分内容主要来自《让你不再害怕指针》:要了解指针,多多少少会出现一些比较复杂的类型,所以,先介绍一下如何完全理解一个复杂类...转载 2020-02-13 23:45:11 · 97 阅读 · 0 评论