用数组联合初始化结构

时间:2020-03-19 18:12:32

标签: c struct union

我注意到有很多关于该主题的文章,但是我似乎无法指出任何有帮助的地方。

我定义了以下代码:

typedef struct
{
    float re;
    float im;
} MyComplex;

typedef struct
{
    float rf;
    union
    {
        float     noise[4];
        MyComplex iq[4];
    };
} RfTable_t;

RfTable_t Noise[2] = 
{
    { 1.2f, .noise=0.f },
    { 2.1f, .noise=0.f };
};

**EDIT - Add function Test**

void Test()
{
    Noise[0].rf = 2.1f;
    Noise[0].noise[0] = 3.2f;
}

我正在尝试静态定义全局变量Noise。 我收到以下错误:

   expected primary expression before '{' token
   expected primary expression before '{' token
   expected primary expression before '}' before '{' token
   expected primary expression before '}' before '{' token
   expected primary expression before ',' or ';' before '{' token
   expected declaration before '}' token

2 个答案:

答案 0 :(得分:2)

要初始化的任何结构,联合和/或数组都需要使用自己的花括号集来对其进行初始化。具体来说,联合需要一组大括号,联合内部的float数组也需要大括号:

RfTable_t Noise[2] =
{
    { 1.2f, { .noise={0.f} } },
    { 2.1f, { .noise={0.f} } }
};

还请注意,您在初始化程序内部有一个流浪;

答案 1 :(得分:0)

我做了最小的修改以使其能够编译:

#include <stdio.h>

typedef struct
{
    float re;
    float im;
} MyComplex;

typedef struct
{
    float rf;
    union
    {
        float     noise[4];
        MyComplex iq[4];
    };
} RfTable_t;

RfTable_t Noise[2] = 
{
    { 1.2f, .noise={0.f} },  // Initialize NOISE with {0.f} instead of 0.f.
    { 2.1f, .noise={0.f} }   // Remove extra semi-colon.
};


int main(void) {
    return 0;
}

清洁编译:

https://ideone.com/pvI9Ci

简介:
noise是一个数组。
要初始化它,必须使用数组初始化器语法:
{ value, value, value }

您在0.f的值周围没有方括号。

此外,您还有一个分号。