我想从 Fortran 调用一个 C api 函数。C 函数接受一个字节数组:
void image(const void *bitmap, int w, int h);
其中三个连续字节*bitmap
表示 RGB 颜色三元组,并被解释为unsigned char
在 C 中。我想在 Fortran 中初始化位图并注意在 C 中绘图。Fortran 中的当前定义使用
integer*1 rgbImage(6,2)
例如初始化 2x2 的图像,但编译器不接受赋值
rgbImage(1,1) = 255
得到红色。我已经看到将BYTE
, UNSIGNED*1
,LOGICAL*1
用于无符号单字节的提示,但是 gfortran(MacPort 的 gcc 4.4 或 Mac OS X 下的 4.6)对它们中的任何一个都不满意。我可能会通过作弊和分配价值-1
而不是 来逃脱255
,但这使用起来非常不舒服。编译器标志-fno-range-check
有助于编译代码,但在其他 Fortran 编译器中可能不可用,我认为这是一个丑陋的解决方案(我仍然想捕捉其他警告)。值'FF'X
or'11111111'B
也被识别为 32 位整数。
非常希望代码可以跨不同的 Fortran 编译器移植。