0

我正在处理两种不同的 LCD 初始化。一个是教授的硬件,另一个是我的。我想使用宏定义在两个函数之间切换:

#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_Group3LCD_Professor在包含文件之前启用其中一个。

于 2013-07-03T19:10:55.473 回答
0

一定要使用宏吗?另一种方法是将这两个函数放在单独的文件中,然后只构建你想要的那个。或者甚至将两者都构建为不同的可执行文件,并在运行时选择所需的一个。

如果你不熟悉构建这样的东西,你需要一个 Makefile(一个名为 Makefile 的文件)。例如,要从一个公共文件 app.c 以及您在 prof.c 和 stud.c 中的两个实现构建两个应用程序“prof”和“stud”:-

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 回答