gpt4 book ai didi

c - 将 header 中的结构声明为 typedef

转载 作者:行者123 更新时间:2023-11-30 18:45:51 24 4
gpt4 key购买 nike

我试图在头文件中将结构定义为 typedef 并在许多源中使用它。我在 here 中找到了类似的答案但我不确定 typedef 是否可以定义为 extern。另外 msg_encoded 应该有一个默认值。

// lib.h

#ifndef lib_h
#define lib_h

struct msg_encoded_s
{
uint8_t msg[10];
int length;
} msg_encoded_default = {{0}, 0};

typedef struct msg_encoded_s msg_encoded;

#endif

// lib.c

#include "lib.h"

msg_encoded some_var;

// main.c

# include "lib.h"
int main(){
msg_encoded some_other_var;
}

main.o:(.bss.msg_encoded_default+0x0): multiple definition of `msg_encoded_default'

最佳答案

像这样的“声明”

struct msg_encoded_s {
...
} msg_encoded_default;

实际上是 (1) 名为 msg_encoded_sstruct 类型的定义和 (2) this 变量的定义类型名为“msg_encoded_default”。

因此,如果您将此头文件包含在单独的翻译单元中,那么您将重新定义名为 msg_encoded_default 的变量,这是不允许的。

要克服这个问题,请编写一个标题,例如...

typedef struct msg_encoded_s
{
uint8_t msg[10];
int length;
} msg_encoded;

extern msg_encoded msg_encoded_default;

在一个翻译单元中写入:

#include "myheader.h"
msg_encoded msg_encoded_default = {{0}, 0};

在所有其他翻译单元中只需写...

#include "myheader.h"
...
int test = msg_encoded_default.length; // or something like this

关于c - 将 header 中的结构声明为 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53450847/

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