Im пытается связать с функцией extern с помощью указателя на него. Но каждый раз, когда я пытаюсь, я получаю ошибки компилятора, что внешняя функция не объявлена. У меня мало опыта работы с внешними функциями, и поэтому я не вижу своей ошибки. У меня есть функция, объявленная в lcd.c, которую я пытаюсь получить из отдельного файла memory.c.Доступ к внешней функции с помощью указателя функции в C
Мне нужно использовать указатели функций, поскольку я пишу эмулятор, и у меня есть массив адресов памяти, где каждый элемент массива ссылается на аппаратную функцию, вызываемую при обращении к этому адресу памяти. В принципе позволяет мне делать:
UINT8 WriteMem(int address, UINT8 data) {
return memory[address](data);
}
Heres мой код им проблемы с:
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);
Я компиляции кода с помощью GCC на Linux Mint
и получить ошибку
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)
Редактировать
Heres файл сборки: только
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
Im пытаясь скомпилировать memory.o на данный момент, поэтому я разрезал dow п только та часть
Показать ваш 'makefile' пожалуйста. – prehistoricpenguin
Вам не нужно явно использовать 'extern'. –
@StefanoSanfilippo Да, это правда, по умолчанию все функции extern, но не должно быть никаких проблем, явно объявляя функции extern –