-->
您的位置 首页 > 加盟资讯

几个很受欢迎的 c 语言项目有哪些,几个很受欢迎的 c 语言项目

zlogzlog是一个纯C日志函数库,具有高可靠性、高性能、线程安全、灵活、概念清晰的特点。 zlog在效率、功能和安全性方面明显优于log4c,并且是用C语言编写的,具有相对更强的通用性。 zlog具有以下特点:

syslog分类模型比log4j模型更直接,并且自定义日志格式会导致多种输出,包括动态文件、静态文件、stdout、stderr、syslog和用户定义的输出函数。运行时的手动和自动更新配置可提供高性能(同时确保安全性),比syslog(3) 和rsyslogd 组合快大约1000 倍。在多线程和多进程环境中准确的文件传输就像每微秒调用包装器dzlog 一样简单(程序默认只使用一个类别)。 MDC 是线程的键值对表,可以使用用户定义的字段进行自扩展。只要你在POSIX 系统上(当然需要兼容C99 的vsnprintf),zlog 仓库链接:

https://github.com/HardySimpson/zlog

zlog用户手册:

http://hardysimpson.github.io/zlog/UsersGuide-CN.html

测试.c:

#include #include 'zlog.h'int main(int argc, char** argv){ int rc; if (rc) { printf('初始化失败\) n');值-1; } zc=zlog_get_category('my_cat'); zlog_info(zc, '你好,zlog'); }test.conf:

xmakexmake是一个跨平台的安装(编译)工具。 xmake是一个基于Lua的轻量级跨平台构建工具。它是使用xmake.lua维护项目构建的,与makefile/CMakeLists.txt相比,具有更简洁直观的配置语法,即使对于初学者来说也更容易使用。快速启动可以让用户专注于实际的项目开发。 xmake官网:

https://xmake.io/

1. 支持平台: Windows (x86, x64) macOS (i386, x86_64, arm64) Linux (i386, x86_64, cross toolchain.) *BSD (i386, x86_64) Android (x86, x86_64,armeabi,armeabi-v7a,arm64 -v8a)iOS(armv7,armv7s,arm64,i386,x86_64)WatchOS(armv7k,i386)MSYS(i386,x86_64)MinGW(i386,x86_64,arm,arm64)Cygwin(i386,x86_64)Wasm(wasm32)Cross(交叉)工具链.) 2. 支持的工具链3. 支持的语言C/C++Objc/Objc++SwiftAssemblyGolangRustDlangFortranCudaZig (实验) 4. 编译测试多任务并行编译测试:

单任务编译测试:

官网内容非常丰富,感兴趣的朋友已经详细讲解了xmake。

gear-libgear-lib是一组通用的C基础库。

全部用POSIX C 实现,目标是实现与Linux、Windows、Android 和iOS 的跨平台兼容性。适用于物联网、嵌入式、网络服务开发等场景。这包括:

gear-lib非常好用,可以作为日常开发中的工具库。齿轮库地址:

https://github.com/gozfree/gear-lib

inihinih 是一个用C 语言编写的INI 文件解析器。 ini 文件是初始化文件的缩写。 INI 文件由节、键和值组成,注释由分号(;) 表示。

[ip] ;Section1ip_addr=192.168.1.103[test];Section2name=ChengNnum=66 #include #include #include 'ini.h'typedef struct{ const char* ip_addr;} 配置; const char* 节, const char* 名称, const char* 值){配置* pconfig=(配置*)user; #define MATCH(s, n) strcmp(section, s)==0 strcmp(name, n)==0 if (MATCH('ip', 'ip_addr')) { pconfig-ip_addr=strdup(value) } else if (MATCH('test', 'name')) { pconfig -name=strdup(value); } else if (MATCH('test', 'num')) { pconfig-num=atoi(value); } else { return 0; return 1;}int main(int argc, char* argv[]){ 配置config ; config.ip_addr=NULL; /* 设置默认值*/config.num=0;ini', 处理程序, 配置) 0) { printf(''无法加载``ip.ini''\n'); printf(''从``ip.ini': 加载ip_addr=%s, name=%s, num=%d\n', config.ip_addr, config.name, config.num) if (config.ip_addr ); free((void*)config.ip_addr); if (config.name) (void*)config.name); return 0;}queuequeue.h 对于Linux 和FreeBSD 来说是一个非常有用的头文件。该头文件充满了宏定义操作,因此不仅可以在Linux/嵌入式Linux项目中使用,还可以在单片机项目中使用。使用宏实现以下数据结构。

SLIST:单向无尾链表LIST:双向无尾链表STAILQ:单向无尾链表(可用作队列) TAILQ:双向无尾链表(可用作队列) 所有数据结构支持以下功能:

在链表的开头插入一个节点。 删除一个节点。该头文件位于Linux 系统上的以下路径:

/usr/include/sys/queue.h

您也可以从以下网址查看:

https://code.woboq.org/userspace/glibc/misc/sys/queue.h.html

/* * 单链表的定义。 */#define SLIST_HEAD(name, type) \struct name { \ struct type *slh_first; /* 第一个元素*/\}#define SLIST_HEAD_INITIALIZER(head)\ { NULL }#define SLIST_ENTRY (type) \struct {\ struct type *sle_next; /* 下一个元素*/\}/* * 单链表函数*/#define SLIST_INIT(head) do { \ (head)-slh_first=NULL; while (/*CONSTCOND*/0) #define SLIST_INSERT_AFTER (slistelm, elm, field) do { \ (elm)-field.sle_next=(slistelm)-field.sle_next=(elm) ;\} while (/*CONSTCOND*/0)#define SLIST_INSERT_HEAD(head, elm, field ) do { \ (elm)-field.sle_next=(head)-slh_first; \ (head)-slh_first=(elm); \} while (/*CONSTCOND*/0)#define SLIST_REMOVE_HEAD(head, field ) do { \ (head)-slh_first=(head)-slh_first-field.sle_next; while (/*CONSTCOND*/0)#Definition SLIST_REMOVE(head, elm, type, field) do { \ if ((head)- slh_first==(elm)) {\ SLIST_REMOVE_HEAD((head), field); \ 结构类型*curelm=( head)-slh_first; \ while(curelm-field.sle_next !=(elm)) \curelm=curelm-field .sle_next=\curelm-field.sle_next-field.sle_next; while (/*CONSTCOND*/0)#define SLIST_FOREACH(var, head, field)\ for((var)=(head)-slh_first; (var); (var)=(var)-field.sle_next)/* * 单链表访问方式。 */#define SLIST_EMPTY(head) ((head)-slh_first==NULL)#define SLIST_FIRST(head) ((head)-slh_first)#define SLIST_NEXT(elm, field) ((elm) )-field.sle_next)cJSONhttps://github .com/DaveGamble/cJSON.git

JSON(JavaScript 对象表示法)是一种轻量级数据交换格式。 JSON 的简单性和清晰的层次结构使其成为理想的数据交换语言。 易于人类读写,易于机器解析生成,有效提高网络传输效率。 cJSON 是一个用C 语言编写的库,用于解析和打包JSON 数据。

protobufhttps://github.com/protocolbuffers/protobuf

Protocol buffers是Google开发的一种数据格式,类似于XML,可用于数据存储、通信协议等。它独立于语言和平台并且具有高度可扩展性。 JSON类型的数据具有极好的可读性,但由于整个数据包中都包含无用的数据,自然就带来了一定的通信负载。 protobuf 是一种比JSON 更轻量级的数据格式。 protobuf的优点:

强大的可扩展性。消息格式升级,兼容性更好。它比Json 或XML 需要更少的序列化,使其适合网络传输。谢谢你!私信回复Embedded Book即可领取博主精心编辑的嵌入式电子书。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023