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

Добавлено:
04.04.2011 00:23:50
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.
Re: Какой порядок вычисления аргументов функции?

Добавлено:
04.04.2011 00:51:27
Odyssey
Порядок вычисления аргументов не документирован и непредсказуем. В рассылке FPC когда-то давно мелькали жалобы на то, что этот порядок отличается от Delphi. Был получен ответ, что на этот порядок завязывать свою программу нельзя. Т.е. если важен порядок, нужно вычислять значения заранее (как у вас в отрывке 1).
Извиняюсь, ссылку уже не найду, и тривиальные запросы в гугл не принесли желаемого результата. Поэтому если захотите проверить, придётся искать самостоятельно.
Re: Какой порядок вычисления аргументов функции?

Добавлено:
04.04.2011 07:37:29
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
Re: Какой порядок вычисления аргументов функции?

Добавлено:
04.04.2011 10:55:12
devels
Вообще если у вас программа завязана на порядке выполнения аргументов вызова функции, то вы что-то делаете не так, такой проблемы не должно возникать, потому что это явно какой-то костыль.
Re: Какой порядок вычисления аргументов функции?

Добавлено:
04.04.2011 12:50:39
Sergei I. Gorelkin
Там нет никаких закономерностей. Параметры вычисляются, грубо говоря, в зависимости от сложности манипуляций по помещению их в нужное место (регистры либо стек). Эта сложность зависит от типа вызова функции, типов вызовов функций, результаты которых передаются в параметрах, типов аргументов, и наконец, платформы.
Re: [Решено] Какой порядок вычисления аргументов функции?

Добавлено:
04.04.2011 15:55:59
trius-strannik
потому что это явно какой-то костыль.
не костыль, и не завязана, но можно и по другому, что я уже и сделал.
Там нет никаких закономерностей.
проверить стоило, ну нет так нет и всё на том.
Спасибо тем кто откликнулся.