使用' extern'用于在C中创建数组

时间:2017-04-19 07:04:25

标签: c extern

我使用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'

2 个答案:

答案 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。这是一个“声明”,它没有“定义”它自己的变量。因此,存在是“已知的”,而不是“已经证明”。

稍后,虽然链接器正在搜索“实际”变量,但它没有得到一个,因此错误。