| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > порядок исполнения кода в условиях |
| Автор: СЭНСЭЙ 6.12.2014, 21:19 | ||||
| Добрый день. Знаю что в ПХП, например, операнды в условии обрабатываются с лева на право и их обработка прекращается если одно или несколько операндов удовлетворяет условие. Например:
аналог на делфи:
результат функции func2 не будет вычисляться и функция проигнорируется если результат выполнения func1()=true. А как обстоят дела в делфи? Как называется такая документация и где можно про это прочитать? П.С. в хелпе по делфи 7 я этой информации не нашел. |
| Автор: Poseidon 6.12.2014, 21:30 | ||
Точно так же. Об этом не будет написано в справке к Delphi, это основы Pascal. Можешь экспериментальным путем это проверить. |
| Автор: Illusion Dolphin 6.12.2014, 21:33 |
| В делфи можно менять поведение http://stackoverflow.com/questions/18598466/break-condition-to-or-and-and-operators-in-an-if-statement http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsbooleanshortcircuitevaluation_xml.html |
| Автор: СЭНСЭЙ 9.12.2014, 22:35 | ||||
But notice that this isn't only an optimisation, since this feature allows you to write code like
which will work even if myarr[0] doesn't exist. This is rather common, actually. Но ведь в делфи и так можно обращаться к несуществующему элементу массива? Или только если массив динамический? Да - проверил. Только если массив динамический. Если индексы массива заданы явно то нельзя. И еще проверил:
выдает ошибку на условии так что похоже директива не помогает |
| Автор: bems 9.12.2014, 22:53 |
| на статических массивах компилятор проверяет индексы статически, где может. а обращаться к несуществующим индексам нельзя, но для включения проверки индексов в рантайм есть отдельная директива компилятора {$R+} если она выключена то код проверяющий индекс не генерируется, но при обращении к несуществующим индексам возможны рандомные проблемы |
| Автор: phomm 12.12.2014, 22:52 | ||
| По последнему посту автора ответ: директива тут ни при чём, она работает отдельно от проверки индексов, и компилятор спокойно съест код:
но засчёт буливала будет чтение по некорректному индексу. Просто компилятор умеет понимать, что индекс стамассива некорректный когда его задают константой (явной или просто числом), а вот при указании через переменную - не поймёт. |