c - 函数指针的外部数组

标签 c arrays typedef extern

先了解一下上下文。我的程序有一个标题,work.h。这个头文件包含一个结构、一些函数定义和一个指向我的基本函数的外部指针数组。

work.h

typedef struct _foo {
  int id;
  char something[20];
} foo;

typedef void (*pointer_function)(foo *);

void do_first_to_foo(foo *);

void do_second_to_foo(foo *);

void do_third_to_foo(foo *);

extern pointer_function base_functions[3];

然后是一个名为 work.c 的程序,其中包含函数体,然后是主程序 main.c。在头文件work.h中观察,我定义了三个函数的原型(prototype),数组的大小为3,所以extern数组上的指针将分别指向这3个函数。

我的问题是,如何将 extern 数组的指针与这三个函数相关联,其次,我需要在哪个文件中执行此操作(work.cmain.c)。 c).

我了解此关联,我需要在文件 work.c 中执行此操作,但仅此而已。

最佳答案

work.c中:

#include "work.h"

pointer_function base_functions[] = {
    do_first_to_foo,
    do_second_to_foo,
    do_third_to_foo };

说明:该数组名是一个全局符号,只需要在一个编译单元(.c文件生成的.o文件)中实际定义即可。如果你没有它,链接器将找不到它。如果您有多个副本,链接器会提示。您只需要一个,与全局导出函数(未标记为内联)相同。

编辑:添加显示 #include "work.h",这很重要,因为它允许编译器检查 extern 声明是否与实际定义。如果您将其排除在外,一切都将毫无怨言地编译和链接,但如果存在不匹配,您将得不到任何指示,这可能会造成严重破坏,例如在其他编译单元中使用变量时损坏内存中的其他数据。

关于c - 函数指针的外部数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15958229/

相关文章:

c - 如何 malloc() 非默认类型的多维数组?

java - 空数组时显示错误

php - 如何通过php数组一条一条更新mysql中的每条记录?

c - C 中结构的 malloc(从 C++ 移植)

c - typedef 是存储类说明符吗?

c++ - 如何在运行时增加结构数组大小

c++ - static const char * const 和 static const char [] 有什么区别?

c - pthread 和一些原始线程池的奇怪行为

ruby - 将数组内容加入 'English list'

c++ - 动态创建typedef