web-dev-qa-db-ja.com

.hでtypedefされた構造体を転送する方法

私はPreprocessor.hを持っています

#define MAX_FILES 15

struct Preprocessor {
    FILE fileVector[MAX_FILES];
    int currentFile;
};

typedef struct Preprocessor Prepro;

void Prepro_init(Prepro* p) {
    (*p).currentFile = 0;
}

そのとき、宣言と定義を分離する必要があることに気付きました。だから私はPreprocessor.cを作成しました:

#define MAX_FILES 15

struct Preprocessor {
    FILE fileVector[MAX_FILES];
    int currentFile;
};

typedef struct Preprocessor Prepro;

そして、Preprocessor.hは次のようになります。

void Prepro_init(Prepro* p) {
    (*p).currentFile = 0;
}

Pr..hがPreproタイプを知らないため、それは明らかに機能しません。私はすでにいくつかの組み合わせを試しましたが、どれもうまくいきませんでした。解決策が見つかりません。

24
erandros

typedef struct Preprocessor Prepro;ヘッダーに、ファイルとcファイル内の定義、およびPrepro_init定義。これは問題なくあなたに代わって宣言します。

Preprocessor.h

#ifndef _PREPROCESSOR_H_
#define _PREPROCESSOR_H_

#define MAX_FILES 15

typedef struct Preprocessor Prepro;

void Prepro_init(Prepro* p);

#endif

Preprocessor.c

#include "Preprocessor.h"

#include <stdio.h>

struct Preprocessor {
    FILE fileVector[MAX_FILES];
    int currentFile;
};

void Prepro_init(Prepro* p) {
    (*p).currentFile = 0;
}
28
Joe

Preprocessorの定義を非表示にする場合は、ヘッダーファイルに次のように入力するだけです。

struct Preprocessor;
typedef struct Preprocessor Prepro;

ただし、より一般的には、他のコードで実際に使用できるように、ヘッダーファイルにPreprocessor定義も必要になる可能性があります。

8

.c.hに入力する必要があり、その逆も同様です。 Prepro_init.cファイルになければならず、そのファイルは#include "Preprocessor.h"でなければなりません。

1
hamstergene