Какой порядок вычисления аргументов функции?

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Какой порядок вычисления аргументов функции?

Сообщение trius-strannik » 04.04.2011 00:23:50

Доброго времени суток

Собственно: Какой порядок вычисления аргументов функции, слева-направо или наоборот?

Такие отрывки: (VivodSpisok - возвращает строку из динамического списка)

Код: Выделить всё
p1:= VivodSpisok;
p2:= VivodSpisok;
Stroka_p1_plus_Sptroka_p2(p1, p2);


Код: Выделить всё
Stroka_p1_plus_Sptroka_p2(VivodSpisok, VivodSpisok);


имеем в первом случае: p1+p2, а во втором: p2+p1.
Аватара пользователя
trius-strannik
новенький
 
Сообщения: 23
Зарегистрирован: 11.06.2009 07:19:24
Откуда: Томск

Re: Какой порядок вычисления аргументов функции?

Сообщение Odyssey » 04.04.2011 00:51:27

Порядок вычисления аргументов не документирован и непредсказуем. В рассылке FPC когда-то давно мелькали жалобы на то, что этот порядок отличается от Delphi. Был получен ответ, что на этот порядок завязывать свою программу нельзя. Т.е. если важен порядок, нужно вычислять значения заранее (как у вас в отрывке 1).

Извиняюсь, ссылку уже не найду, и тривиальные запросы в гугл не принесли желаемого результата. Поэтому если захотите проверить, придётся искать самостоятельно.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Какой порядок вычисления аргументов функции?

Сообщение trius-strannik » 04.04.2011 07:37:29

Спасибо за ответ.

Delphi почти не использовал, поэтому как там - не знаю.

По причине непредсказуемости решил проверить, чтобы было.

Для 2 параметров:
2-1
далее:
3-2-1
4-3-1-2
5-4-1-2-3
6-5-1-2-3-4
7-6-1-2-3-4-5
8-7-1-2-3-4-5-6
9-8-1-2-3-4-5-6-7

Некоторые закономерности прослеживаются.

Добавлено спустя 5 минут 46 секунд:
0.9.28.2-10ubuntu1
FPC: 2.4.0
Ревизия SNV: 22277
Аватара пользователя
trius-strannik
новенький
 
Сообщения: 23
Зарегистрирован: 11.06.2009 07:19:24
Откуда: Томск

Re: Какой порядок вычисления аргументов функции?

Сообщение devels » 04.04.2011 10:55:12

Вообще если у вас программа завязана на порядке выполнения аргументов вызова функции, то вы что-то делаете не так, такой проблемы не должно возникать, потому что это явно какой-то костыль.
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

Re: Какой порядок вычисления аргументов функции?

Сообщение Sergei I. Gorelkin » 04.04.2011 12:50:39

Там нет никаких закономерностей. Параметры вычисляются, грубо говоря, в зависимости от сложности манипуляций по помещению их в нужное место (регистры либо стек). Эта сложность зависит от типа вызова функции, типов вызовов функций, результаты которых передаются в параметрах, типов аргументов, и наконец, платформы.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: [Решено] Какой порядок вычисления аргументов функции?

Сообщение trius-strannik » 04.04.2011 15:55:59

потому что это явно какой-то костыль.

не костыль, и не завязана, но можно и по другому, что я уже и сделал.
Там нет никаких закономерностей.

проверить стоило, ну нет так нет и всё на том.

Спасибо тем кто откликнулся.
Аватара пользователя
trius-strannik
новенький
 
Сообщения: 23
Зарегистрирован: 11.06.2009 07:19:24
Откуда: Томск


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25

Рейтинг@Mail.ru