我试图使用指向它的指针链接到外部函数。但是每次我尝试时,我都会收到编译器错误,即 extern 函数未声明。我对外部函数的经验很少,所以看不到我的错误。我在 lcd.c 中声明了一个函数,我试图从一个单独的文件 memory.c 中获取该函数。
我在编写模拟器时需要使用函数指针,并且我有一个内存地址数组,其中数组的每个元素都链接到访问该内存地址时调用的硬件函数。基本上允许我这样做:
UINT8 WriteMem(int address, UINT8 data) {
return memory[address](data);
}
这是我的代码我遇到的问题:
液晶显示器
UINT8 LCD_dataline_R(UINT8 data) {
// Some code
return aValue;
}
液晶显示器
extern UINT8 LCD_dataline_R(UINT8 data);
内存.c
#include "lcd.h"
typedef UINT8 (*MemFunct)(UINT8 data);
MemFunct ReadDataLine = LCD_dataline_R;
.
.
UINT8 recieved = ReadDataLine(0x80);
我在 Linux Mint 上使用 GCC 编译代码
并得到错误
Running command: make -f makefile memory.o
gcc -c -Wall memory.c
memory.c:3:25: error: ‘LCD_dataline_R’ undeclared here (not in a function)
编辑
这是生成文件:
CC=gcc
CFLAGS=-Wall -std=c99 `sdl-config --cflags` `pkg-config --cflags gtk+-2.0`
LIBS=`sdl-config --libs` `pkg-config --libs gtk+-2.0`
all: psiora clean
memory.o: memory.c psiora.c lcd.c
$(CC) -c $(CFLAGS) $^
clean:
rm -rf *o psiora
我现在只是想编译memory.o,所以我把它缩减到了那部分