C:
使用TOML进行工作

如何操作:

要在C语言中使用TOML,首先需要一个能够解析TOML文件的库,因为C标准库中不包含这项功能。一个流行的选择是tomlc99,它是一个针对C99的轻量级TOML解析器。以下是读取一个简单TOML配置文件的快速指南:

首先,确保已在项目中安装并正确链接了tomlc99

示例 TOML 文件(config.toml):

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true

解析此文件的C代码:

#include <stdio.h>
#include <stdlib.h>
#include "toml.h"

int main() {
    FILE *configFile;
    configFile = fopen("config.toml", "r");
    if (!configFile) {
        perror("无法打开文件");
        return EXIT_FAILURE;
    }

    toml_table_t *config = toml_parse_file(configFile, NULL, 0);
    if (!config) {
        fprintf(stderr, "文件解析错误\n");
        fclose(configFile);
        return EXIT_FAILURE;
    }

    toml_table_t *database = toml_table_in(config, "database");
    if (database) {
        const char *server = toml_raw_in(database, "server");
        printf("数据库服务器:%s\n", server);

        toml_array_t *ports = toml_array_in(database, "ports");
        for (int i = 0; i < toml_array_nelem(ports); i++) {
            int64_t port;
            toml_int_at(ports, i, &port);
            printf("端口 %d:%ld\n", i, port);
        }
    }

    toml_free(config);
    fclose(configFile);
    return EXIT_SUCCESS;
}

输出:

数据库服务器:"192.168.1.1"
端口 0:8001
端口 1:8001
端口 2:8002

深入了解

TOML由GitHub的联合创始人Tom Preston-Werner创建,作为对他在其他配置文件格式中感知到的限制的回应。其目标是直白无歧义,对人和电脑来说,读写都不需要复杂的解析规则。在C生态系统中,TOML并不像在高级语言中那样是一等公民,比如Rust中的serde_toml或Python中的toml,这些语言拥有原生支持的库。相反,C开发者需要依赖像tomlc99这样的外部库,但鉴于C语言强调的极简主义和性能,这是典型的。

尽管TOML因其清晰而受到赞扬,在选择配置文件格式时,考虑项目的需求至关重要。在需要更复杂结构或与Web API交互的场景中,尽管它们的复杂性增加了,JSON或甚至YAML可能提供更好的适配。TOML在需要可读性和简单性的配置中脱颖而出,并不一定是在需要最高级数据结构的情况下。