我有一个图书馆:
mylib
|__ device
|__ lcd.h
|__ lcd_config.h
|__ lcd.c
Run Code Online (Sandbox Code Playgroud)
.
// File lcd.h
#include lcd_config.h
void function initLcd();
void function writeLcd();
Run Code Online (Sandbox Code Playgroud)
.
// File lcd.c
#include lcd.h
void function writeLcd(){
// some code
}
Run Code Online (Sandbox Code Playgroud)
.
// File lcd_config.h inside mylib
#ifndef lcd_config_H
#define lcd_config_H
#define TEST 10
#endif
Run Code Online (Sandbox Code Playgroud)
我想在项目中使用库,但我想重新定义配置文件.
myproject
|__ lcd_config.h
|__ mylcd.c
|__ main.c
Run Code Online (Sandbox Code Playgroud)
.
// File lcd_config.h inside myproject(at main.c level)
#ifndef lcd_config_H
#define lcd_config_H
#define TEST 20
#endif
Run Code Online (Sandbox Code Playgroud)
.
// File mylcd.c
#include lcd.h
void function initLcd(){
printf("%d", TEST);
}
Run Code Online (Sandbox Code Playgroud)
.
// File main.c
#include "device/lcd.h"
int main(void) {
initLcd(); // print 10
}
Run Code Online (Sandbox Code Playgroud)
.
// File main1.c
#include "lcd_config.h"
#include "device/lcd.h"
int main(void) {
initLcd(); // print 10 too
}
Run Code Online (Sandbox Code Playgroud)
在我的项目中,我希望TEST = 20,我怎样才能实现这一目标?
UPDATE
现在看文件,这是我的真实案例.
打印测试= 20我已经把#include lcd_config.h之前#include lcd.h里面mylcd.c.如果我把它放在主文件中(如main1.c)10将打印,si认为预处理在mylcd.h之前看看main.c.
谢谢
首先将定义TEST的标头包含在20中.请注意#ifndef条件会阻止第二个标头实际执行任何操作,这就是为什么在您的情况下TEST的值仍为10.
更详细地说,下面的块表示"此标题只应包含在项目中一次".如果在第一个头之后包含该头,则定义其中具有相同子句的第二个头将不会改变.
#ifndef lcd_config_H
#define lcd_config_H
...
#endif
Run Code Online (Sandbox Code Playgroud)
我认为整个情况看起来很奇怪,但是不应该有太多标题具有完全相同的名称.
| 归档时间: |
|
| 查看次数: |
5068 次 |
| 最近记录: |