Fortran から C API 関数を呼び出したいです。C 関数は、バイト配列を受け入れます。
void image(const void *bitmap, int w, int h);
ここで、連続する 3 バイトは*bitmap
RGB カラー トリプルを表し、C のように解釈されます。Fortran でunsigned char
ビットマップを初期化し、C 内で描画を処理したいと考えています。Fortran での現在の定義は使用しています
integer*1 rgbImage(6,2)
たとえば、2x2 のイメージを初期化しますが、コンパイラは代入を受け入れません
rgbImage(1,1) = 255
赤い色を得るために。BYTE
符号なしの 1 バイトに, UNSIGNED*1
,を使用するというヒントを見たことがありLOGICAL*1
ますが、gfortran (Mac OS X での MacPort の gcc 4.4 または 4.6) は、どちらにもあまり満足していません。-1
チートしての代わりに値を代入することでおそらく回避できます255
が、それは非常に使いにくいです。コンパイラ フラグ-fno-range-check
はコードのコンパイルに役立ちましたが、他の Fortran コンパイラでは使用できない可能性があり、私はそれを醜い解決策と考えています (他の警告をキャッチしたい場合もあります)。値'FF'X
または'11111111'B
も 32 ビット整数として認識されます。
コードがさまざまな Fortran コンパイラ間で移植可能であることが強く望まれます。