【问题标题】:gcc member initialization in array of struct结构数组中的 gcc 成员初始化
【发布时间】:2013-02-03 08:49:36
【问题描述】:

当你创建一个 if 数组时,如何只初始化结构的一个成员,当你使用 GCC 时,例如:

#define UNUSED OxFF
typedef struct inputs{
    uint8_t state;
    uint8_t limit;
    uint8_t value;
} INPUT_TYPE;

//create array but just care that all members .state are UNUSED
INPUT_TYPE Node1[5] ={ Node1.state = UNUSED }

初始化是指数组而不是结构的成员。 当然可以使用循环,但我不想在运行时使用“input_init”函数进行初始化。

【问题讨论】:

    标签: gcc embedded


    【解决方案1】:

    初始化某些成员的语法是 C99 功能。 你已经接近了,试试这个:

    #define UNUSED OxFF
    typedef struct inputs{
        uint8_t state;
        uint8_t limit;
        uint8_t value;
    } INPUT_TYPE;
    
    INPUT_TYPE Node1[5] = {
        {.state = UNUSED},
        {.state = UNUSED},
        {.state = UNUSED},
        {.state = UNUSED},
        {.state = UNUSED}
    };
    

    见:How to initialize a struct in accordance with C programming language standards

    编辑:

    由于我不够清楚,我编辑了答案。

    数组初始化是如何工作的,这里回答了:How to initialize all members of an array to the same value?

    【讨论】:

    • 这只会设置Node1[0].state == UNUSED。所有其他元素的.state 成员将设置为零。
    • 我终于在[link]gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/…找到了它,它是两种情况的组合。
    • INPUT_TYPE Node1[5] = { [0 ... 4].state = UNUSED } 工作正常
    【解决方案2】:

    我终于在http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Designated-Inits.html#Designated-Inits找到了它,它是两种情况的组合。

    INPUT_TYPE Node1[5] = { [0 ... 4].state = UNUSED }在大型数组中很有用。

    【讨论】:

      【解决方案3】:

      由于UNUSED 是一个非零值,如果需要,您需要为数组的每个元素指定初始化器:

      INPUT_TYPE Node1[5] = { 
          {.state = UNUSED}, 
          {.state = UNUSED}, 
          {.state = UNUSED}, 
          {.state = UNUSED}, 
          {.state = UNUSED}
      };
      

      【讨论】:

        【解决方案4】:

        为什么不为 init 使用构造函数:

        #define UNUSED OxFF
        typedef struct inputs{
            uint8_t state;
            uint8_t limit;
            uint8_t value;
        
           inputs(){state = UNUSED, limit, value;};
        
        } INPUT_TYPE;
        

        ?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多