![]() |
|
|
![]()
|
|
| kamre |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: нет Всего: 13 |
Есть ли в fortran проверка типов при компиляции? Т.е. говорится ли что-то об этом в стандарте? Или все зависит от компилятора и его настроек?
Вот пример кода:
Создал проект (с настройками по умолчанию) в VS2005 и компилирую с помощью IVFC9.1 Все успешно собирается, не выдает ни одной ошибки. Но, разумеется, падает при запуске. Почему такое странное поведение? Ведь вроде же не трудно понять, что из всех вызовов только два первые являются правильными. Когда программировал на с++, таких приколов не было никогда:
|
||||
|
|||||
| kamre |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: нет Всего: 13 |
Кстати, если подпрограмму сделать как внутреннюю:
то компилятор показывает ошибки.... Правда ему и второй вызов не нравится, пишет о несоотвествии типов. Еще можно вот так:
Получается, что для всех не внутренних подпрограмм нужно определять интерфейс? |
||||
|
|||||
| Cr@$h |
|
||||||
![]() Исследователь ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 1 Всего: 41 |
Есть правила приведения типов. Эти правила и проверяются на этапе компиляции. При работе все данные интерпретируются тем самым верно. За исключением расширений типа объединений из С. Такого не может быть. У внутренней программы выден её интерфейс, поэтому компиляция возможна.
И правильно делает. Как и С++. Знаете почему? Эта перемена у вас помечена как возвращаемая из процедуры! Указан интерфейс для внешней процедуры. Всё верно. Странно, если было бы иначе
Получается, что для любой подпрограммы должен быть интерфейс. Если она внутренняя -- он у неё есть автоматически. Если внешняя -- его нужно обязательно прописать. Так в большинстве языков программирования. В первом случае вы просто поместили всё в один файл, а это ни о чём не говорит. Либо подпрограмма является внутренней для другой подпрограммы, либо является внутренней для головной программы, либо является внутренней для модуля. Другого не дано. В принципе, можете попробовать описать подпрограмму перед головной программой как в С++. |
||||||
|
|||||||
| kamre |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: нет Всего: 13 |
Уфф.. Я уже и забыл, что когда-то такое спрашивал на форуме, но уведомления по почте рулят P.S. за это время я уже успел опять вернуться к "кодингу" на C++ (поменял работу), и даже стал засматриваться на Java... А расчетными задачами на фортране уже давно не занимался... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Fortran | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |