gpt4 book ai didi

c - 如何通过宏向 C 库提供选项

转载 作者:行者123 更新时间:2023-12-01 18:30:18 25 4
gpt4 key购买 nike

我有以下名为 lcd.c 的源。

#include <stdio.h>
#include "lcd.h"

void print_mode(void)
{
printf("%d\n",LCD_MODE);
}

header lcd.h包含LCD_MODE的定义,如下所示。

#ifndef LCD_H
#define LCD_H

#include "util.h"

#ifndef LCD_MODE
#define LCD_MODE LCD_MODE_8BIT
#endif

void print_mode(void);

#endif /* LCD_H */

文件util.h包含

#ifndef UTIL_H
#define UTIL_H

#define LCD_MODE_8BIT 1
#define LCD_MODE_4BIT 0

#endif /* UTIL_H */

lcd.c 将作为某个库的一部分单独编译。我想将它与应用程序 main.c 一起使用,如下所示。

#include "util.h"
#define LCD_MODE LCD_MODE_4BIT
#include "lcd.h"

int main(void)
{
print_mode();
return 0;
}

期望的结果是根据 main.cLCD_MODE_4BIT 的定义打印 0。但是,会打印 1,因为头文件发现在 lcd.c 预处理期间未定义 LCD_MODE。我应该如何通过主应用程序将 LCD_MODE 选项传递给 print_mode()

最佳答案

如果无法重新编译 lcd.c,则无法在另一个源文件中使用宏,因为 lcd.o 已经具有硬编码的值。

您可以创建一个静态变量(默认为 LCD_MODE),您可以使用 setter 更改该变量:

#include <stdio.h>
#include "lcd.h"

static int the_mode = LCD_MODE;

void print_mode(void)
{
printf("%d\n",the_mode);
}

void set_mode(int new_mode)
{
the_mode = new_mode;
}

lcd.h 应包含新配置函数的原型(prototype)顺便说一句:

void set_mode(int new_mode);

然后在你的 main 中,你可以:

set_mode(LCD_MODE);

(或者将 LCD_MODE 宏放到任何地方,因为它无法解决任何问题并且会增加困惑)

关于c - 如何通过宏向 C 库提供选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53015738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com