【问题标题】:Change between two function definitions with macros使用宏在两个函数定义之间切换
【发布时间】:2013-07-03 19:07:58
【问题描述】:

我正在处理两种不同的 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,我可以在这两个函数之间进行选择。事实是,我从未真正使用过这些宏。这应该工作吗?或者更确切地说,有没有其他方法可以做到这一点?

谢谢!

【问题讨论】:

    标签: c function macros initialization lcd


    【解决方案1】:

    应该是

    #ifdef LCD_Professor
    ...
    #endif
    
    #ifdef LCD_Group3
    ...
    #endif
    

    不是#ifndef 来选择你想使用其中一个,然后你可以在包含文件之前执行#define LCD_Group3LCD_Professor 来启用其中一个。

    【讨论】:

      【解决方案2】:

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

      如果你不熟悉构建这样的东西,你需要一个 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,而不是空格

      【讨论】:

      • 我很熟悉它,但由于我使用软件将代码下载到微​​控制器,我仍在学习如何使用它! (LPCXpresso)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多