在头文件ex.h
中定义数组结构
#include <stdint.h>
typedef struct example_t{
const char *pStr;
uint32_t size;
} example_t;
struct example_t array_struct[2];
然后在.c文件ex1.c
中初始化数组结构
#include "ex.h"
struct example_t array_struct[2] = {{"hello", 5}, {"world", 5}};
void ex1()
{
for (int i = 0; i < 2; ++i){
printf("%s\n", array_struct[i].pStr);
printf("%u\n", array_struct[i].size);
}
}
在另一个.c文件ex2.c
中也使用初始化的结构数组
#include "ex.h"
void ex2()
{
for (int i = 0; i < 2; ++i){
printf("%s\n", array_struct[i].pStr);
printf("%u\n", array_struct[i].size);
}
}
这是一个好的实践,还是最好在ex2.c
中使用extern
,并在ex1.c
中定义它?
2条答案
按热度按时间vulvrdjw1#
这是:
没有声明一个数组,而是在定义一个数组。当您将.c文件链接到可执行文件中时,使用此选项将导致多个定义的编译错误。
要声明它,需要添加
extern
:ltqd579y2#
头文件应该只包含声明:数组必须用
extern
关键字声明,如果没有这个关键字,你有一个定义,而不是声明:ex.h:
最好在源文件中包含头文件和实际定义对象的声明,这样编译器就可以检查声明和定义是否一致。在你的例子中,你需要结构定义,但在其他没有这样的constaint的情况下,在对象声明中包含头文件仍然更安全。