C语言
文章平均质量分 55
smallerxuan
这个作者很懒,什么都没留下…
展开
-
GNU C扩展-typeof
GUN C提供了一不少扩展(参考C-Extensions),其中就包括了typeof(),其作用类似于C++11 里的 decltype 操作符,可以取得变量或表达式的类型。 几个比较有意思的使用typeof()的方式: 1、用于定义函数指针类型的变量int func(int a);typeof(func)* func_ptr; 2、通过typeof()定义用于接收函数返回值的变量int func(int a);typeof(func(0)) b;...原创 2021-10-24 23:21:54 · 7554 阅读 · 0 评论 -
s_log_safe开源log库
s_log_safe开源log库s_log_safe库是一个采用MIT License协议开源的、小巧的、基于s_log(https://github.com/smallerxuan/s_log.git)开源库和s_ring_buffer(https://github.com/smallerxuan/s_ring_buffer.git)开源库打造的一款线程安全的嵌入式log库,纯C语言实现,移植、使用方便、快捷。在s_log原有的输出等级控制功能、log重定向功能、彩色log输出功能基础上还提供了多线程原创 2021-07-17 19:44:48 · 22160 阅读 · 0 评论 -
s_ring_buffer开源ring_buffer库
s_ring_buffer库是一个采用MIT License协议开源的、小巧的、纯C语言的、ring_buffer实现,读写锁分离设计,核心实现代码平台无关(抽出了平台相关的适配层), 可以方便的进行移植、使用。仓库地址:https://github.com/smallerxuan/s_ring_buffer.gits_ring_buffer用户接口s_ring_buffer包含如下用户接口:`1、构造器接口 s_ring_buffer_constructor()2、析构器接口 s_ri原创 2021-07-13 00:32:41 · 11514 阅读 · 0 评论 -
s_log开源log库
Slog库是一个采用MIT License协议开源的、小巧的嵌入式log库,纯C语言实现,可以方便的进行移植、使用。支持log输出等级控制功能、log重定向功能、彩色log输出功能,使用灵活方便、简单快捷。仓库地址:https://github.com/smallerxuan/SLog.gitSLog用户接口 SLog包含如下用户接口:s_tag()、s_log_a()、s_log_e()、s_log_w()、s_log_t()、s_log_i()、s_log_d()、s_lo...原创 2021-07-11 14:02:57 · 8704 阅读 · 0 评论 -
STM32F4移植FreeRTOS V10.3.1
STM32F429移植FreeRTOS原创 2020-06-25 15:41:52 · 16120 阅读 · 0 评论 -
Linux学习日记(十五)—— Ubuntu下基本文件操作
Ubuntu下基本文件操作linux系统环境下可以使用C语言进行编程,要操作该环境下的文件可以使用C便准库定义的接口函数,也可以使用POSIX标准定义的接口函数。其中:open()、read()、write()、lseek()、close()这组函数接口的特点是不带缓存,能够直接对文件(设备)进行操作,属...原创 2018-08-22 20:44:13 · 6482 阅读 · 0 评论 -
Linux学习日记(十六)——Ubuntu下更多文件操作相关函数
Ubuntu下更多文件操作相关函数 stat()函数 stat()函数用于获取一个文件的信息 头文件依赖: #include <sys/types.h> #include <sys/stat.h> ...原创 2018-08-22 21:55:21 · 768 阅读 · 0 评论 -
使用宏定义方便切换使用ASCII编码和Unicode编码
使用宏定义方便切换使用ASCII编码和Unicode编码 在使用VS环境进行VC编程的时候,有时候我们会被要求建立两个版本的程序,一个处理ASCII编码的字符数据,一个处理Unicode编码的字符数据,难道我们必须写两套代码用以处理么?其实更好的选择是编写一套代码,但使它们能够编译成两个版本。通常的做法是定义一个条件宏:#ifdef _U...原创 2018-08-24 16:03:10 · 1135 阅读 · 0 评论 -
C语言编写学生成绩管理系统
这个《学生成绩管理系统》是以前大一的时候的课设,今天整理文件的时候发现了,就直接把代码贴到博客上吧。挺基础的一个东西,就是涉及到C语言实现的链表,以及文件操作,结构体的序列化存储与读取等。DataType.h/*编译环境:VS2017\Windows10作者:smallerXuan指导:*/#ifndef ___DDATA_TYPE__#define ...原创 2018-10-23 19:37:24 · 22740 阅读 · 1 评论 -
51单片机上移植C语言的printf()
移植了C语言的printf()函数到51单片机上,实现了在51单片机的串口类pc端的printf()输出。使用方法:在项目工程中添加xxprintf.h和xxprintf.c文件 在项目中需要使用xxprintf()函数的地方引入头文件xxprintf.h,在xxprintf.h中引入单片机相关头文件 在xxprintf.h中的MaxSize 可根据需要调整最大输出字符数量,例如修改为...原创 2018-10-24 07:21:58 · 6642 阅读 · 2 评论 -
基于51单片机的电子温度计系统的设计与实现
设计一个基于51单片机的电子温度计系统,其采用STC12C5A60S2芯片作为控制中心,DS18B20温度传感器为测温元件,LCD为显示器件。硬件设计部分包括温度传感电路设计、温度控制电路设计及显示电路设计;软件设计部分包括主程序设计、读温度子程序设计、温度转换命令子程序和计算温度子程序设计。根据设计方案,设计出来的温度计能实现温度采集和显示功能,能测量0~100℃之间的温度,测量精度为0.5℃...原创 2018-10-24 07:51:12 · 28962 阅读 · 10 评论 -
求解最大子序列和的经典实现
求解最大子序列和 记录下最大序列和的多个实现方法,时间复杂度由高至低,分别为ON3、ON2、ONlogN、ON。分别对应的是:直接穷举式、穷举改进式、分治处理、联机算法。好的算法实现,总给人以美的体验。 下面直接贴代码:#include <st...原创 2018-12-03 21:28:35 · 8076 阅读 · 2 评论 -
C语言中的数据类型更深层次的理解
C语言中的数据类型更深层次的理解 在现在的计算机语言中都有数据类型的概念,不同点大多只是在于类型强弱的区别,除此以外在本质上并无不同。数据类型是对数据的抽象,类型是一种归类的概念,类型相同的数据具有相同的表示形式、存储格式以及相关的数据操作,程序中所使用的数据必然属于一种数据类型。 数据类型的产生实际上就是为了方便统一的在计算机语言中表达现实世界中的事与物。 数据类型的本质是计...原创 2018-06-17 20:10:44 · 531 阅读 · 0 评论 -
C语言中的共用体(union)
共用体(union)指的是多个不同的变量共同使用同一段内存空间,其内存空间的大小只与这些变量中字节长度最大的类型的变量有关。就目前而言,数据存储在内存中不管是什么类型,其本质都是存储0、1二进制数据,但不同之处在于数据由二进制数据表的的规则不同,对应的就有了空间大小的不同。共用体(union)类型的变量分配的空间是其占用存储空间最大的类型那么大,也就是说该空间能够容纳多种数据类型的数据而不会丢失数...原创 2018-06-12 09:09:54 · 1428 阅读 · 0 评论 -
关于数据的大端对齐和小端对齐
关于数据的大端对齐和小端对齐 我们知道现行存储设备中都是以字节为存储单元来进行划分的,这和早期的实现的延续相关。不管是32位的存储器,还是64位的存储器,我们都习惯用字节进行度量,习惯性的说它们的存储单元是4字节的、8字节的。对于存储芯片一个存储单元对应着一个物理地址,但更准确的说应该是一个字节的存储区对应一个物理地址。对于存储在这些存储单元中的数据来说又是什么样的状态呢? ...原创 2018-05-22 09:33:36 · 6243 阅读 · 1 评论 -
C99的复合文字(compound literal)
C99的复合文字(compound literal)原创 2017-09-28 10:52:28 · 715 阅读 · 0 评论 -
C语言的6种存储模型
C语言的6种存储模型 C语言提供了包括基于指针的存储模型和自动、寄存器、静态&空链接、静态&外部链接、静态&内部链接在内的6种存储模型。与存储期(storage duration)、作用域(scope)、链接(linkage)的不同组合与不同的存储模型紧密相关。存储期(storageduration)就是变量可在内存中存在的时间。而作用域(scope)和链接(linkage)则能够限定原创 2017-09-29 21:12:55 · 1415 阅读 · 0 评论 -
C语言的文件处理相关
C语言的文件处理相关函数 对于现代的编程语言来说,能够对文件数据进行处理是非常有必要的。那么我们有必要了解,到底什么是文件。文件(file)通常的解释是存储在数据存储器中的一段命名的格式化的数据。再进一步,C语言视文件为连续的字节序列,可以字节读取的数据集合(这和C起源于UNIX环境有关,不同的操作系统,存在文件系统的差异,包括文件模型的区别,C语言在此基础上使用的是标准高级I/O【sta原创 2017-10-02 13:23:54 · 2401 阅读 · 0 评论 -
C语言中的宏(macro)
C语言中的宏(macro) 在C语言中,宏(macro)也是一个挺有意思的东西。C语言中的宏由预处理指令 #define 来定义。说到这里,再简单了解下预处理。在编译器对程序处理的过程中,在字符到源字符的映射和逻辑行处理后就会对文本进行划分,划分出预处理的语言符号(token)序列及空白字符和注释序列,然后就是预处理的过程了。预处理指令 #define是一个明显常量定义指令,用于定义符号常原创 2017-10-03 17:41:54 · 3315 阅读 · 0 评论 -
C语言中的TRUE和FALSE
C语言中的TRUE和FALSE C语言没有内建的bool型变量,通常是使用宏来定义整型或字符型的常量来表示true和false(是的,可能会有人将字符型的常量定义为TRUE和FALSE,因为char型变量位域更紧凑,相对于int型会更节省空间),但通常都会使用int型。通常会使用#define或typedef来进行bool的定义,例如:#define TRUE 1(或者typed原创 2017-10-10 17:32:20 · 28782 阅读 · 0 评论 -
C语言中的位域结构体
C语言中的位域结构体一、什么是位域结构体? 在数据表达的过程中,有的时候我们并不需要一个完整的字节来表示,例如在表示二逻辑状态数据的时候我们只需要一个二进制位(0、1)就能够很好的表达出来。同样的出于节省空间或者精简数据,减小数据大小,以提高数据传输速度等因素的考虑,C语言提供了一种称为位域(位段)的数据结构。在位域(位段)结构中,把一个字节中的二进位划分为几多个不同的区域,并对原创 2017-12-18 19:03:00 · 6629 阅读 · 0 评论 -
while((c= getchar()) != EOF)的隐藏问题
while((c= getchar()) != EOF)的隐藏问题 曾今写过这样的代码:char c;while((c= getchar()) != EOF){ Do……}用以读取文本中的数据,曾一直以为这段代码应该是正确的,从语法到逻辑上看起来它都应该是正确的,但其实不然,因为这尽在逻辑层面是正确的,但结合底层实现来思考,它是存在问题的,而且问题很大。 先分析库函数getchar(),...原创 2018-02-08 11:53:26 · 557 阅读 · 0 评论 -
void main()正确么?
void main()正确么? void main()正确么?这个提问有些让人摸不着头脑的样子,但这的确值得思考。见过很多种的main()函数风格,例如:void main(void)、int main(void)、int main(int argc, char** argv )、int main(int argc, char* argv[] )、int main(int argc, char* ...原创 2018-02-08 11:55:13 · 1772 阅读 · 0 评论 -
关于POSIX标准
关于POSIX标准 POSIX表示可移植操作系统接口,它定义了操作系统应该为应用程序提供的接口。这一标准带来的好处就是在一个POSIX兼容的操作系统编写的符合其标准的应用程序可以直接在其他POSIX支持的操作系统中无需修改而能够直接编译运行。当然这很容易让人想到那些依靠虚拟机支持的跨平台开发语言的跨平台特性,例如JAVA,可以说它的跨平台能力是靠牺牲性能而换取来的。但遵守POSIX标准开发的程序在...原创 2018-05-20 19:52:25 · 9932 阅读 · 0 评论 -
32位和64位操作系统相关的小知识
32位和64位操作系统相关的小知识 现今的计算机内存大致可以分成两个区域:用户区域和内核区域。操作系统就运行再内核区域,而普通的应用程序就运行在用户区域。这种结构的出现是伴随着对系统安全性的需求而出现的,用户程序不可访问、修改内核区域,但一些极精简的小操作系统依旧是用户程序和操作系统运行在同一个内存区域的。 众所周知32位的操作系统最大内存为4G,以Linux操作系统来说...原创 2018-05-21 20:13:29 · 306 阅读 · 1 评论 -
关于C语言的 可移植的数据类型
关于C语言的 可移植的数据类型对于数据类型,我们都知道它是什么,可以说是在熟悉不过的东西了。但是我们真的有关注过它么?被很多人忽视,或许是因为它太过基础了的原因。拿C语言来说,要知道,在C语言的标准中,它并没有强制要求每种数据类型的具体长度,它实际上严格要求的是每种数据类型的最少长度,也就是说,不同的系统下,不同的编译器下,你定义的数据的实际长度可能是互不相同的。有没有发现什么?是原创 2017-09-27 15:24:54 · 1948 阅读 · 0 评论