ポインターを使用してextern関数にリンクしようとしています。しかし、試行するたびに、extern 関数が宣言されていないというコンパイラ エラーが発生します。私は外部関数の経験がほとんどないため、自分の間違いを見ることができません。別のファイルmemory.cから取得しようとしているlcd.cで宣言された関数があります。
エミュレーターを作成するときに関数ポインターを使用する必要があり、メモリ アドレスの配列があり、そのメモリ アドレスがアクセスされた場合に呼び出されるハードウェア関数に配列の各要素がリンクされます。基本的に私にできること:
UINT8 WriteMem(int address, UINT8 data) {
return memory[address](data);
}
私のコードは次のような問題を抱えています:
液晶.c
UINT8 LCD_dataline_R(UINT8 data) {
// Some code
return aValue;
}
lcd.h
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のみをコンパイルしようとしているので、その部分だけに切り詰めました