造轮子: C 语言跨平台小工具库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Neur2n
V2EX    C

造轮子: C 语言跨平台小工具库

  •  2
     
  •   Neur2n 2023-02-28 17:31:17 +08:00 3225 次点击
    这是一个创建于 956 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为工作中需要写跨平台的代码,所以把一些常用的小工具整合成了一个单头文件( single-header )库x.h,希望各位佬不吝赐教,一起交流。这个库还在不断加入新函数或是重构。

    以下是我自己想的一些 FAQ:

    Q:为什么用 C 而不是用 C++?
    A:需要和其他语言(如 Python )接起来时,C 接口比较方便。另外最初版本是 C++的,换成 C 就是想玩玩。

    Q:为什么不用 C11 ?
    A:因为 Visual Studio 要 2022 版才支持 thread 、atomic 等 C11 特性,我希望 x.h 尽可能兼容更多的编译器。

    Q:跨什么平台?
    A:目前只有 Linux 和 Windows 是测试过的,我希望能够兼容 macOS 、iOS 、Android 等,但是目前没有相关环境来测试。代码默认除了 Win32 就是 POSIX ,且尽可能用标准 C 中的接口。如果有其他平台的开发者希望合作开发或帮助测试,非常欢迎。

    第 1 条附言    2023-02-28 21:07:18 +08:00

    Q:x.h的目的?
    A:提供跨平台的小工具,以及对一些平台特定接口的跨平台统一化,例如:

    • sleep:Windows上使用Sleep,Linux上使用nanosleep
    • socket:Windows与Linux的socket接口稍有不同,也进行了统一化
    • C11才有的thread、mutex等:在Windows上不依赖winpthread,而是封装Win32接口,Linux上则使用pthread
    13 条回复    2023-03-01 17:14:14 +08:00
    hsfzxjy
        1
    hsfzxjy  
       2023-02-28 17:33:42 +08:00 via Android   1
    有 github 吗
    Q4h7388nR28s95fa
        2
    Q4h7388nR28s95fa  
       2023-02-28 17:33:54 +08:00
    项目名称:x.h

    项目地址: https://github.com/Neur1n/x.h

    这么小的位置,我差点就想问一句链接在哪里了……
    Neur2n
        3
    Neur2n  
    OP
       2023-02-28 17:35:51 +08:00
    @HiCode 谢谢老哥帮忙发出来,确实太小了
    hsfzxjy
        4
    hsfzxjy  
       2023-02-28 17:36:58 +08:00 via Android
    @HiCode 啊这,完全没注意到
    proxytoworld
        5
    proxytoworld  
       2023-02-28 18:28:56 +08:00
    能介绍一下干嘛的吗,一下没看出来
    favourstreet
        6
    favourstreet  
       2023-02-28 18:38:46 +08:00 via Android
    眨眼间已经到了需要单独解释为什么用 c 写程序的时代了
    learningman
        7
    learningman  
       2023-02-28 19:31:17 +08:00
    有个叫 melon 的库也是干这事儿的
    Neur2n
        8
    Neur2n  
    OP
       2023-02-28 20:56:35 +08:00
    @learningman 比不上 melon 我这只是把多个平台的功能封装成跨平台接口
    adoyle
        9
    adoyle  
       2023-02-28 21:08:48 +08:00
    跨平台的底层语言,不如试试 Zig ,无缝衔接 C/C++。
    https://ziglang.org/
    rockcat
        10
    rockcat  
       2023-02-28 22:52:43 +08:00
    反正是不想碰 C++的,太复杂了,而且乱七八糟...很难找到头绪
    zeromake
        11
    zeromake  
       2023-03-01 09:27:44 +08:00 via Android
    @adoyle 被 c/c++的字符串整吐了,完全不想用没有标准库封装的字符串的语言……(zig 已经明确说了不会有 string 容器)
    Neur2n
        12
    Neur2n  
    OP
       2023-03-01 09:34:04 +08:00
    @proxytoworld 提供一些小工具(获取文件大小、获取时间戳、日志打印等)、提供不同平台的统一接口(如 Windows 的线程和 Linux 的 pthread ),总的来说目标是所有工具都可以跨平台、跨编译器使用
    junmoxiao
        13
    junmoxiao  
       2023-03-01 17:14:14 +08:00
    做大了就是个 tbox
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2625 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 06:46 PVG 14:46 LAX 23:46 JFK 02:46
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86