gpt4 book ai didi

c - 如何在 C 中的头文件中初始化结构的结构?

转载 作者:行者123 更新时间:2023-12-05 01:33:42 25 4
gpt4 key购买 nike

我正在尝试将一些旧代码从 20 年前的 DOS 系统移植到 GNU Linux 系统。在它们的几个头文件中(随处可见),它们具有声明和初始化的结构结构。当我使用遗留代码的编写方式进行编译时,我收到了警告。关于如何在同一个头文件中使用它的任何提示?

以下是我根据他们正在做的事情制作的一个简化示例。

struct A
{

struct B temp1;
struct C temp2;
};

struct B
{

int temp3;
int temp4;
int temp5;
};

struct C
{

int temp6;
int temp7;
int temp8;
};


//These are the variables in how they are related to the initialization below

//struct A test_one = {{temp3,temp4,temp5},{temp6,temp7,temp8}};

struct A test_one = {{1,2,3},{4,5,6}};

最佳答案

您不应该在头文件中实例化任何结构。如果您这样做,将在每个包含标题的 C 文件中创建一个不同的实例,其中通常不是预期的效果。

要在 C 文件中执行此操作,您必须执行以下操作。

void foo(){
struct A parent;
struct B child_b;
struct C child_c;

child_b.temp3 = 3;
child_b.temp4 = 4;
child_b.temp5 = 5;

child_c.temp6 = 6;
child_c.temp7 = 7;
child_c.temp8 = 8;

parent.temp1 = child_b;
parent.temp2 = child_c;
}

我强烈考虑制作类似于此的辅助函数

void initB(struct B* s, int x, int y, int z){
s->temp3 = x;
s->temp4 = y;
s->temp5 = z;
}

如果您希望保留数组初始化语法,请考虑使用 union 。

关于c - 如何在 C 中的头文件中初始化结构的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4490965/

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