函数指针的外部数组

Sea*_*ado 3 c arrays typedef extern

首先是一点背景.我的程序有一个标题,work.h.这个头包含一个结构,一些函数定义,以及指向我的基函数的extern指针数组.

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];
Run Code Online (Sandbox Code Playgroud)

然后一个程序work.c用函数体调用,然后是主程序main.c.在标题work.h中观察我已经定义了三个函数的原型,并且数组的大小是3,因此extern数组上的指针将指向3个函数中的每一个.

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

我理解我需要在文件中执行此关联work.c,但没有别的.

hyd*_*yde 6

work.c:

#include "work.h"

pointer_function base_functions[] = {
    do_first_to_foo,
    do_second_to_foo,
    do_third_to_foo };
Run Code Online (Sandbox Code Playgroud)

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

编辑:添加显示#include "work.h",这很重要,因为它允许编译器检查extern声明是否与实际定义匹配.如果你把它遗漏了,一切都会编译和链接没有抱怨,但你没有迹象表明是否存在不匹配,当其他编译单元中使用变量时,这可能会破坏内存中的损坏的其他数据.