我使用extern
创建了一个数组,但似乎它给了我一个错误
"未定义对`callback_Task'"
的引用
// test.h
typedef struct {
uint32_t count;
uint32_t total;
} callback_task;
extern volatile callback_task callback[10];
现在在C源文件
// test.c
void test_task(void) {
callback[1].count = 1;
callback[1].total = 2;
}
在编译时给出错误:
未定义引用`callback'在' test_task'
答案 0 :(得分:0)
extern
声明不会在任何地方创建数组。它只是编译器/链接器在某处查找变量的指令。
您必须定义,而不是extern
,在某些翻译单元中,您将链接您的程序。
一个好的候选人似乎是test.c
,就像这样:
volatile callback_task callback[10];
void test_task(void) {
callback[1].count = 1;
callback[1].total = 2;
}
答案 1 :(得分:0)
TL; DR 这不是编译器,它是链接器抱怨search_before
变量M.I.A.状态。
详细说明,如
之类的陈述callback
告诉编译器“某处存在”变量 extern volatile callback_task callback[10];
,其类型为callback
。这是一个“声明”,它没有“定义”它自己的变量。因此,存在是“已知的”,而不是“已经证明”。
稍后,虽然链接器正在搜索“实际”变量,但它没有得到一个,因此错误。