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

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

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

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

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

Сообщение trius-strannik »

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

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

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

Код: Выделить всё

p1:= VivodSpisok;
p2:= VivodSpisok;
Stroka_p1_plus_Sptroka_p2(p1, p2);


Код: Выделить всё

Stroka_p1_plus_Sptroka_p2(VivodSpisok, VivodSpisok);


имеем в первом случае: p1+p2, а во втором: p2+p1.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

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

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

Сообщение trius-strannik »

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

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
devels
постоялец
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

Сообщение devels »

Вообще если у вас программа завязана на порядке выполнения аргументов вызова функции, то вы что-то делаете не так, такой проблемы не должно возникать, потому что это явно какой-то костыль.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Там нет никаких закономерностей. Параметры вычисляются, грубо говоря, в зависимости от сложности манипуляций по помещению их в нужное место (регистры либо стек). Эта сложность зависит от типа вызова функции, типов вызовов функций, результаты которых передаются в параметрах, типов аргументов, и наконец, платформы.
Аватара пользователя
trius-strannik
новенький
Сообщения: 23
Зарегистрирован: 11.06.2009 07:19:24
Откуда: Томск

Сообщение trius-strannik »

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

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

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

Спасибо тем кто откликнулся.
Ответить