Я хотел бы вызвать функцию C api из Fortran. Функция 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's gcc 4.4 или 4.6 под Mac OS X) не очень доволен ни одним из них. Я, вероятно, мог бы избежать обмана и присвоить значение -1
вместо 255
, но это очень неудобно в использовании. Флаг компилятора -fno-range-check
помог скомпилировать код, но может быть недоступен в других компиляторах Fortran, и я считаю это уродливым решением (я все равно хотел бы поймать другое предупреждение). Значения 'FF'X
или '11111111'B
также распознаются как 32-битные целые числа.
Крайне желательно, чтобы код был переносимым между различными компиляторами Фортрана.