「 foo1.h」と「foo2.c 」を含むソースファイル「foo.c 」があります。
foo1.h
#include "pthread.h"
#define MACROFOO() PTHREAD_MUTEX_INITIALIZER
// Few other macros
foo2.h
#include "pthread.h"
#define MACROFOO() PTHREAD_MUTEX_INITIALIZER
// Few other macros
foo.c
#include "foo1.h"
#include "foo2.h"
typedef struct mut
{
pthread_mutex_t mut;
int state;
}strMut;
strMut->mutex = MACROFOO();
foo.c ファイルをコンパイルすると、コンパイラはMACROFOOを解決できなかったと言います。MACROFOOは foo1.h と foo2.h の両方で宣言されており、foo.c に両方のヘッダーを含めました。
これらのヘッダー ファイルには他のマクロがほとんどないため、両方のヘッダーを含める必要があります。
ここでの魔法は、ソース ファイルの MACROFOO を右クリックして [Go To Declaration] を押すと、foo1.h と foo2.h の両方が表示されることです。したがって、基本的にコンパイラは、MACROFOO が宣言されている場所を認識しています。
Eclipse JUNO v1.5.1を使用しています。
ヘッダー ファイルの 1 つから MACROFOO を削除しようとしましたが、まだ問題が存在します (ただし、どのヘッダー ファイルからも MACROFOO を削除するつもりはありません)。
助けはありますか?前もって感謝します。