林试图链接到使用指针给它的外部函数。但每次尝试时,我都会收到编译器错误,说明extern函数未声明。我几乎没有外部功能的经验,所以看不到我的错误。我有一个函数在lcd.c中声明,我试图从一个单独的文件memory.c中获取。访问使用函数指针外部函数用C
我需要使用函数指针,因为我写的模拟器,我有内存地址的数组,其中,如果内存地址被访问数组链接调用硬件功能的每个元素。基本上让我做的事情:
UINT8 WriteMem(int address, UINT8 data) {
return memory[address](data);
}
继承人有问题我的代码即时通讯:
lcd.c
UINT8 LCD_dataline_R(UINT8 data) {
// Some code
return aValue;
}
lcd.h用于
extern UINT8 LCD_dataline_R(UINT8 data);
memory.c
#include "lcd.h"
typedef UINT8 (*MemFunct)(UINT8 data);
MemFunct ReadDataLine = LCD_dataline_R;
.
.
UINT8 recieved = ReadDataLine(0x80);
我编译在Linux上使用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,所以我已经削减了它n至只是部分
显示你的'makefile'请。 – prehistoricpenguin 2013-05-11 11:08:23
你不需要明确地使用'extern'。 – 2013-05-11 11:13:14
@StefanoSanfilippo是的,这是真的,默认情况下,所有的功能都的extern,但应该没有问题,通过显式声明函数为extern – 2013-05-11 11:15:40