最も簡単な方法は、C 定義を読み取って Fortran に変換するスクリプトを好みの言語で作成することです。構文を修正すれば、非常に簡単です。
1) #define xxx yyy が整数になる、パラメータ:: xxx = yyy
2) Fortran には unsigned がないため、unsigned short と short はどちらも整数 (kind=1) です。
3) 文字配列の使用方法によって異なります。それらが個別の文字を返し、一括で割り当てられていない場合は、文字 t(nword) として宣言できます。それらが文字列を保持すると予想される場合は、 character(len=nword) t と宣言する必要があります。
4) typedef 構造体 { ... } データファイル
になる
タイプ データファイル シーケンス ... 終了タイプ
5) 以上のことをすべて行った後、C と Fortran の両方のコードのバイト境界が同じであることを確認する必要があります。655 の char 配列はバイト境界にないため、アライメントの問題が発生する可能性があります。
2 番目の方法は、マクロをいじって、マクロに生成を任せることです。C 用に 1 セットのマクロを定義し、Fortran 用に別のセットを定義する必要があります。だからあなたは次のようなものを得るでしょう
STRUCT_BEG(datafile)
INTEGER(a)
SHORT(b)
...
CHARA(t,nword)
FLOATA(dat,nfloats)
STRUCTEND(datafile)
Cの定義は次のようになります
#define STRUCT_BEG(ignore) typedef struct {
#define STRUCT_END(name) } name;
#define INTEGER(a) int a;
#define CHARA(a,length) char a[length];
Fortranの定義は次のようになります
#define STRUCT_BEG(name) \
type name \
sequence
#define STRUCT_END(ignore) end type
#define INTEGER(a) integer::a
#define CHARA(a,length) character(len=length):: a
-e を指定してコンパイルすると、C コンパイラを使用して両方のヘッダーを生成できます。