0

私は2つの異なるLCDの初期化に取り組んでいます。1 つは教授のハードウェアからのもので、もう 1 つは私のものです。マクロ定義を使用して 2 つの関数を切り替えたい:

#ifndef LCD_Professor

void InitLCD (uint8_t N, uint8_t F, uint8_t D, uint8_t C, uint8_t B, uint8_t ID, uint8_t SH) {
 ...
}

#endif

#ifndef LCD_Group3

void InitLCD (uint8_t N, uint8_t F, uint8_t D, uint8_t C, uint8_t B, uint8_t ID, uint8_t SH) { 
...
}

#endif

ファイルの先頭で #define LCD_Group3 を使用すれば、両方の機能から選択できることを期待していました。実は、私はこれらのマクロを実際に扱ったことはありません。これは機能するはずですか?というか、これを行う他の方法はありますか?

ありがとう!

4

2 に答える 2

1

そのはず

#ifdef LCD_Professor
...
#endif

#ifdef LCD_Group3
...
#endif

#ifndefどちらを使用するかを選択するのではなく、ファイルを含める前に、どちらかを有効にすること#define LCD_Group3ができます。LCD_Professor

于 2013-07-03T19:10:55.473 に答える
0

マクロを使用する必要がありますか? 別の方法として、2 つの関数を別々のファイルに入れ、必要な関数だけをビルドすることもできます。または、両方を異なる実行可能ファイルにビルドし、実行時に必要なものを選択することもできます。

そのようなものの作成に慣れていない場合は、Makefile (Makefile という名前のファイル) が必要です。たとえば、共通ファイル app.c から 2 つのアプリケーション「prof」と「stud」を構築し、prof.c と stud.c の 2 つの実装を構築するには:-

all: stud prof
CFLAGS = -g -Wall
CC = gcc

prof: prof.o app.o
        $(CC) $^ -o $@

stud: stud.o app.o
        $(CC) $^ -o $@

各 $(CC) の前にスペースではなく TAB があることに注意してください

于 2013-07-03T19:30:53.573 に答える