2011-12-03 5 views
4

CライブラリのFortranバインディングを書いています。C言語のFortran 2003バインディング:enumsと#definesをどのように翻訳するのですか?

例えば、列挙を使用して(ライブラリヘッダで)定義されている定数を翻訳上のベストプラクティス何ですか使用

typedef enum cufftType_t { 
    CUFFT_R2C = 0x2a,  // Real to Complex (interleaved) 
    CUFFT_C2R = 0x2c,  // Complex (interleaved) to Real 
    CUFFT_C2C = 0x29,  // Complex to Complex, interleaved 
    CUFFT_D2Z = 0x6a,  // Double to Double-Complex 
    CUFFT_Z2D = 0x6c,  // Double-Complex to Double 
    CUFFT_Z2Z = 0x69  // Double-Complex to Double-Complex 
} cufftType; 

及びどの変換定数に#define、例えばそれら

typedef enum cufftCompatibility_t { 
    CUFFT_COMPATIBILITY_NATIVE   = 0x00, 
    CUFFT_COMPATIBILITY_FFTW_PADDING = 0x01, // The default value 
    CUFFT_COMPATIBILITY_FFTW_ASYMMETRIC = 0x02, 
    CUFFT_COMPATIBILITY_FFTW_ALL  = 0x03 
} cufftCompatibility; 

#define CUFFT_COMPATIBILITY_DEFAULT CUFFT_COMPATIBILITY_FFTW_PADDING 

#define CUFFT_FORWARD -1 // Forward FFT 
#define CUFFT_INVERSE 1 // Inverse FFT 

またはそれらの組み合わせ、この情報は、-Dを、または単にUSE-Dモジュールに、別のファイルにあるべき?

答えて

4

enumは実際にはISO_C_Bindingでサポートされています。たとえば、このドキュメントを参照してください。http://docs.cray.com/books/S-3693-36/html-S-3693-36/z1018297010.html 前処理で定義されたリテラル定数については、FortranファイルでCプリプロセッサを実行できます。あるいは、これらの定数をすべて定義して(そしてその1つのファイルに対してのみCプリプロセッサを実行する)余分なモジュールを使用します。 いずれにしても、私はモジュールを使用し、使用することはできません。これには欠点がありますが、これはコンパイラによって生成されコンパイラ固有のモジュールファイルに依存するため、includeを使用すると回避できますが、Fortranのようにはなりません。

関連する問題