我正在尝试将结构定义为头文件中的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):的多个定义 `msg_encoded_default'
答案 0 :(得分:2)
“声明”之类的
struct msg_encoded_s {
...
} msg_encoded_default;
实际上是(1)名为struct
的{{1}}类型的定义和(2)名为`msg_encoded_default的这种类型的变量的定义。 / p>
因此,如果将此头文件包含在单独的翻译单元中,则将重新定义名为msg_encoded_s
的变量。
要解决此问题,请写一个标题,如...
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};