3

こんにちは、Fortran 90 コードを使用して C 関数を呼び出しています。アドレスを操作しているので、C 関数の引数は Fortran で適切に一致する必要があります。コードをコンパイルするために ifort と icc を使用し、64 ビット マシンで作業しています。

いくつかのテストでは、これが で動作することが示されましたがint32_t、最終的な落とし穴を防ぐために、uint32_t

私が呼び出しているC関数には、次のプロトタイプがあります

uint32_t encode_(uint32_t x, uint32_t y)
uint32_t decode_(uint32_t dec)

次のようなことをするだけでは、これらの関数を呼び出すことはできません

integer :: cod,encode
cod = encode(i,j)

これにより、意味不明なことが発生します。したがって、私は回避策を使用しています:

void code2d_(uint32_t j[] ){


uint32_t i;

i=encode_(j[0],j[1]);  
// the underscore is due to the FORTRAN naming convention

printf("Coded %10d  \n",i);

}

続いて Fortran で

 integer :: cod,code2d
 cod = code2d(i,j)

明らかに、引数の型の不一致に問題があります。残念ながら、これを修正する方法がわかりません。私のデコード/エンコード関数ではバイナリ アドレス演算が行われるため、uint32_t.

4

2 に答える 2