C语言 函数指针数组

c语言
Article Directory

在模拟 CPU 时,想直接写一个函数指针数组,函数指针如此声明 :

返回参数 (*变量名)(传入参数)

数组则

返回参数 (*变量名[数组大小])(传入参数)

关键在于,我需要在头文件中定义这个数组,而在 ins.h 中定义后,在其他文件中 include 时,编译器报错,标识符重定义。

1
2
3
4
5
6
7
8
9
10
#ifndef _INS_H
#define _INS_H

extern void (*functions[64])() = {
f_NOP,
f_ADD
};

#endif

但是,如果,不将此变量在头文件中声明,又无法在别的 c 文件中访问该变量。

经过一晚上的摸索,将该数组定义在 ins.c 文件中,加入 extern 关键字,在需要访问该变量的 c 文件中,先声明 extern 。

使用 extern 关键字,我早就想到了,关键在于,不知道如何声明函数指针变量。

刚开始,我还使用 typedef 定义了函数指针类型别名

typedef void (*pfun)();

,尝试在别的 c 文件中

pfunc funcs[10];

声明,结果报错

废话不多说:

ins.c

1
2
3
4
5
6
void f_NOP();
void f_ADD();
extern void (*functions[64])() = {
f_NOP,
f_ADD
};

其他需要访问该变量的 c 文件:

1
2
3
4
5
6
7
8
#include "Instructs.h"

extern void (*functions[64])() ;

void test(){
void (*fun)() = functions[0];
fun();
}

Author: 哒琳

Permalink: http://blog.jieis.cn/2022/4072b61c-263b-4927-9896-4355a235e965.html

Comments