Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как запихнуть массив сруктур в коммонблок в фортране
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
iiv
Добрый день,

не пинайте, пожалуйста, сильно.

На ембеддед GNU линукс в hardkernelовскую борду есть непреодолимое желание притащить в сорсах одну огромную фортрановскую библиотеку. Она компилится, но работает не правильно. Причина: есть структура
Цитата
TYPE STRUCT_MYS
REAL*8 A
LOGICAL D
...
END TYPE

TYPE (STRUCT_MYS) :: MYS(100)

которая включается почти в каждую подпрограмму огромного 120тысяче-спрочного сорса и сидит в отдельном include file.

GNU компилер не делает массив MYS(100) статическим и аллоцирует его от балды в каждой подпрограмме, а по идеологии оно должно быть одно для всех.

Я хотел положить в коммон блок этот массив, но почему-то компиллер ругается на
COMMON /MY_MYS/ MYS
и не дает компилить схожие вариации...

Забыл я фортран, а такими извращениями и никогда не пользовался, а хотелось бы быстро попробовать стоит ли мне этот огромадный софт прикручивать...

Вдруг кто помнит, обгуглился уже на на эту тему и всех кого можно было спросил и никто не помнит или не знает, но вдруг здесь кто помнит и подскажет, пожалуйста, подсобите!

Спасибо!!!

ИИВ
Rst7
Я бы посоветовал обернуть этот массив структур в MODULE name. И, соответственно, в каждом сорце сделать USE name. Так вроде более кошерно для F90.
iiv
Цитата(Rst7 @ Oct 22 2017, 20:59) *
Я бы посоветовал обернуть этот массив структур в MODULE name. И, соответственно, в каждом сорце сделать USE name. Так вроде более кошерно для F90.

спасибо! Да, верно, я сначала тоже так хотел, но прикидочно это - неделя работы, ибо этот гребанный инклюд (вернее их у меня 9 штук однотипных) втыкается почти в каждую подпрограмму, а слово include в сорсе встречается примерно 10 тысяч раз.

Мне же таки хотелось бы намудрить только в инклюде что-то, чтобы не трогать сами сорсы... Понятно, если другого решения не будет, то сделаю именно так, но больно уж много глупой работы получается.

EDIT: я всегда знаю длину массива структуры, и могу положить массив integer такого же размера в какой-то коммон-блок, но почему-то EQUIVALENCE тоже не хочет работать...
Rst7
Так, а расскажите подробнее структуру сорсов. Как и где что инклудится сейчас.

И чем оно вообще раньше компилилось?

QUOTE
EDIT: я всегда знаю длину массива структуры, и могу положить массив integer такого же размера в какой-то коммон-блок, но почему-то EQUIVALENCE тоже не хочет работать...


EQUIVALENCE - это ж вроде исключительно локальное дело. Из него не получится глобальную переменную построить.
iiv
.
iiv
а ларчик-то просто открывался...

Код
TYPE, BIND(C):: STRUCT_MYS
REAL*8 A
LOGICAL D
...
END TYPE

TYPE (STRUCT_MYS) :: MYS(100)
COMMON /MY_MYS/ MYS
SAVE /MY_MYS/


всем большущее спасибо за обсуждение!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.