1

私はこのようなライブラリを持っています:

mylib
  |__ device
        |__ lcd.h
        |__ lcd_config.h
        |__ lcd.c

.

// File lcd.h
#include lcd_config.h

void function initLcd();
void function writeLcd();

.

// File lcd.c
#include lcd.h

void function writeLcd(){
     // some code
}

.

// File lcd_config.h inside mylib
#ifndef lcd_config_H
#define lcd_config_H

#define TEST 10

#endif

ライブラリをプロジェクトで使用したいが、設定ファイルを再定義したい。

myproject
    |__ lcd_config.h
    |__ mylcd.c
    |__ main.c

.

// File lcd_config.h inside myproject(at main.c level)
#ifndef lcd_config_H
#define lcd_config_H

#define TEST 20

#endif

.

// File mylcd.c
#include lcd.h

void function initLcd(){
     printf("%d", TEST);
}

.

// File main.c
#include "device/lcd.h"

int main(void) {
    initLcd(); // print 10
}

.

// File main1.c
#include "lcd_config.h"
#include "device/lcd.h"

int main(void) {
    initLcd(); // print 10 too
}

私のプロジェクトでは、TEST = 20 にしたいのですが、どうすればこれを達成できますか?

アップデート

今ファイルを見てください、これは私の本当のケースです。

TEST=20 を印刷するには、 inside の#include lcd_config.h前に置く必要があります。それをメインファイル(main1.cなど)に入れると、10が印刷されます。前処理は、main.cのmylcd.h内で前処理を行うと思います。#include lcd.hmylcd.c

ありがとう

4

1 に答える 1

7

最初に TEST を 20 に定義するヘッダーを含めます。#ifndef条件により、2 番目のヘッダーが実際に何も実行されなくなることに注意してください。これが、この場合、TEST の値が 10 のままである理由です。

より詳細には、以下のブロックは、「このヘッダーはプロジェクトに一度だけ含める必要があります」と述べています。同じ句を含む 2 番目のヘッダーを定義しても、そのヘッダーが最初のヘッダーの後に含まれている場合、状況は変わりません。

#ifndef lcd_config_H
#define lcd_config_H
...
#endif

全体の状況は奇妙に見えると思いますが、まったく同じ名前のヘッダーが多すぎるべきではありません。

于 2012-08-19T11:37:28.310 に答える