gpt4 book ai didi

在 C 中创建和初始化具有可变长度宏的结构

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:24 24 4
gpt4 key购买 nike

我正在尝试使用可变长度宏来创建和初始化结构。我希望能够使用“0”创建/初始化结构,然后使用可选传入的值初始化结构的某些字段。

这可能吗?我正在尝试以下操作:

#define INIT_ENTRY(x, ...) \
entry_t x = {.id = 0, .age = 0} \
x.id = <I want to use arg1 here>
x.age = <i want to use arg2 here if it exists>

有没有办法做到这一点?

最佳答案

这可以通过参数计数和连接的组合来完成。

  1. 首先,您需要一个宏来计算它的参数,我将其称为 NARGS 这已被询问和回答 here .请注意,答案取决于编译器。

  2. 接下来您需要针对所有特定情况的一系列宏:

    #define INIT_ENTRY_0(x) entry_t x = {.id = 0, .age = 0}
    #define INIT_ENTRY_1(x, _id) entry_t x = {.id = _id, .age = 0}
    #define INIT_ENTRY_2(x, _id, _age) entry_t x = {.id = _id, .age = _age}

  3. 您还需要一个连接宏:

    #define CONCAT(a, b) a##b

  4. 最后,使用连接来选择正确的:

    #define INIT_ENTRY(x, ...) CONCAT(INIT_ENTRY_, NARGS(__VA_ARGS__))(x, #__VA_ARGS__)

关于在 C 中创建和初始化具有可变长度宏的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45765025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com