error: unused variable (struct)

error: unused variable (struct)

error: unused variable 'part2' [-Werror,-Wunused-variable]

错误仅发生在第 2 部分,即使它也已初始化,只是方式不同。这只是一个编译器问题吗?

int main(void)
{
    struct complex
    {
        int a;
        int b;
    };

    struct complex part1;
    part1.a = 2;
    part1.b = 3;

    struct complex part2 = {4, 5};

    struct complex part3 = {part3.a = 7, part3.b = 8};
}   

正如上面评论中提到的,part1 被认为是 "used",因为您在下面明确地为其字段(ab)赋值行:

part1.a = 2;
part1.b = 3;

part2 从未使用过,仅在行中初始化:

struct complex part2 = {4, 5};

part3 更有趣,我很惊讶你的编译器没有抛出错误。通过执行以下操作:

struct complex part3 = {part3.a = 7, part3.b = 8};

您首先分配 part3.a = 7part3.b = 8,然后这些分配的结果用于初始化结构(part3.a = 7 计算为 7part3.b = 8 的计算结果为 8)。它实质上变成了以下一组语句:

part3.a = 7;
part3.b = 8;
struct complex part3 = {7, 8};

我希望你的编译器抛出一个错误,因为你试图在实例化它之前为 part3 的字段赋值。这是未定义的行为。