V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Neur2n
V2EX  ›  C

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

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

    因为工作中需要写跨平台的代码,所以把一些常用的小工具整合成了一个单头文件( 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 吗
    HiCode
        2
    HiCode  
       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   ·   实用小工具   ·   3473 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:53 · PVG 18:53 · LAX 02:53 · JFK 05:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.