|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Подскажите, где прочитать про то, что они инициализируются нулями. Нигде не нашёл, а хочется уверенности. Я вот о чем. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
Выводит всегда все нули (кроме младшего байта, как явно указано мною при объявлении константы) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Т.е. как будто заливка нулями по умолчанию есть. Пробовал извращаться, посредине пропускать - всегда так. Но, блин, где прочитать про этот эффект, чтобы не бояться использовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 15:07 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRock> Подскажите, где прочитать про то, что они инициализируются нулями. Declaring variables, в конце. Там упомянуто и отличие локальных и глобальных переменных в этом плане. YuRock> Нигде не нашёл, а хочется уверенности. Я бы не закладывался. Инициализируй всё сам. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 15:48 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRock, Исходи из того, что типизированные константы это, по сути, глобальные переменные (имено поэтому они не могут участвовать в константных выражениях). Ну а глобалтные переменные всегда инициализируются нулём. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 15:59 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, Ничего я не нашел там, кроме отличия локальных и глобальных, которое и так понятно. Но спасибо, тоже не знал, где это написано. If you don’t explicitly initialize a global variable, the compiler initializes it to 0. Local variables, in contrast, cannot be initialized in their declarations and contain random data until a value is assigned to them. Но дело тут не в этом. У меня в данном примере, кстати, локальная переменная (вернее, даже не переменная, а константа). И она инициализируется таки нулями, если не указать явно другого. Вот про это не могу найти. Нашел только, что все поля структурной константы должны быть перечислены. The fields must be listed in the order in which they appear in the record type declaration, and the tag field, if there is one, must have a value specified Ну, так тому и быть. Гаджимурадов Рустам Я бы не закладывался Да, придется, видимо, не закладываться. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 16:01 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Kazantsev Alexey Исходи из того, что типизированные константы это, по сути, глобальные переменные ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 16:02 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRock Ну вот не вижу я этой сути. Если бы было написано об этом где-то - было бы ок. Ну ты же в курсе, что в дельфях есть такая е#анина, как изменяемые типизированные константы (writeable typed constants)? И эту хрень можно включать и выключать директивой компилятора. Теперь немного подумать и... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 16:09 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Kazantsev Alexey YuRock Ну вот не вижу я этой сути. Если бы было написано об этом где-то - было бы ок. Ну ты же в курсе, что в дельфях есть такая е#анина, как изменяемые типизированные константы (writeable typed constants)? И эту хрень можно включать и выключать директивой компилятора. Теперь немного подумать и... Но это ни разу меня не убеждает, что они инициализируются нулями так же, как гл. переменные. Хотя вот написано: if the {$J+} compiler directive is in effect, typed constants can have new values assigned to them; they behave essentially like initialized variables. Но я не хочу {$J+}. А при {$J-} они ведут себя просто как read-only variables Мне этого не достаточно для успокоения. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 16:21 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Если хочешь покоя, то просто прими, что любая неинициализированная переменная или её часть - источник потенциального геморроя. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 16:29 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRock Но я не хочу {$J+}. А при {$J-} они ведут себя просто как read-only variables Директива не изменяет физического воплощения типизированных констант, она просто разрешает или запрещает их изменять. Вот наглядный пример, что типизированные константы это глобальные переменные: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 16:41 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Kazantsev Alexey Вот наглядный пример, что типизированные константы это глобальные переменные: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 17:00 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Если хочешь покоя, то просто прими, что любая неинициализированная переменная или её часть - источник потенциального геморроя. Но, блин, задача такова, что нужно сделать огромный константный массив структур, у каждой из которых - гора полей, большинство из которых хотелось бы оставить нулями (в зависимости от типа). Конкретнее - это дерево настроек (коих тысячи, с разными типами, свойствами и ограничениями). Очень бы было удобно использовать эту фичу. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 17:03 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Копи-паст - тоже удобная фича в данном случае. Достаточно написать одну полную инициализацию. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 17:09 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Что-то вы уж очень загоняетесь. Может, еще и все поля в объекте занулять? Частично заданная структурная константа - значит, все пропущенные поля нулевые. Иначе можно дойти до чего-то вроде foo := 1; if foo <> 1 then foo := 1; ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 17:19 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Копи-паст - тоже удобная фича в данном случае. Достаточно написать одну полную инициализацию. А когда, внезапно, приходится добавлять еще одно поле в структуру - придется перелопачивать весь массив вместо того, чтобы указать его только там, где надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 17:23 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal Может, еще и все поля в объекте занулять? 2. Можно посмотреть метод TObject.InitInstance, в котором первой строкой идет Код: pascal 1.
чтобы точно понять, что занулять поля в объекте не надо. Fr0sT-Brutal Частично заданная структурная константа - значит, все пропущенные поля нулевые. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 17:27 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRockпридется перелопачивать весь массив вместо того, чтобы указать его только там, где надо. Search-and-Replace запустить, конечно, трудно... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 17:49 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRock Этот пример иллюстрирует только то, что у типизированных констант есть постоянный адрес, как у глобальных переменных. И это значит, что они являются глобальными переменными. А глобальные переменные зануляются. Так-то в доке вообще не сказано, что поля при инициализации можно опускать :) Об этом ещё можно запариться. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 18:06 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
04.10.2021 18:06, Kazantsev Alexey пишет: > Так-то в доке вообще не сказано, что поля при инициализации можно опускать сказано. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 18:08 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Fr0sT-Brutal Что-то вы уж очень загоняетесь. Может, еще и все поля в объекте занулять? Частично заданная структурная константа - значит, все пропущенные поля нулевые. Иначе можно дойти до чего-то вроде foo := 1; if foo <> 1 then foo := 1; ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 18:09 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Мимопроходящий сказано. Ссылочку? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 18:23 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Kazantsev Alexey Мимопроходящий сказано. Ссылочку? Так-то я нашел пока-что, что поля должны быть инициализированы в порядке полей структуры. Но я не нашел ни разрешения пропуска, ни указания, что пропуск параметров запрещен. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 19:15 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRock Но я не нашел ни разрешения пропуска, ни указания, что пропуск параметров запрещен. Про запрет пропуска нет, но есть: "specify the value of each field - as fieldName: value, with the field assignments separated by semicolons". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 21:03 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Kazantsev Alexey YuRock Но я не нашел ни разрешения пропуска, ни указания, что пропуск параметров запрещен. Про запрет пропуска нет, но есть: "specify the value of each field - as fieldName: value, with the field assignments separated by semicolons". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 21:16 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Зачем тогда вообще такое разрешать? Кидал бы ошибку компилятор, да и всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 21:18 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRock Этот пример иллюстрирует только то, что у типизированных констант есть постоянный адрес, как у глобальных переменных. Не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 21:21 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRock Странно, этого я не нашел (6-я версия). Эта фраза есть даже в мануале по Delphi 5. Ссылку не дам, он у меня бумажный (страница 5-41) Вот ссылка на актуальную доку: https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Declared_Constants#Record_Constants YuRock Зачем тогда вообще такое разрешать? Кидал бы ошибку компилятор, да и всё. Такой способ записи поддерживается при декларировании глобальных инициализированных переменных. Не логично, что при одинаковой форме записи, компилятор будет давать разный результат. А раз в случае инициализированных глобальных переменных не указанные поля будут занулены, то и для типизированных констант нет оснований отжидать другого результата. p.s. FPC генерирует ворнинг на пропущенные поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2021, 21:38 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
К слову: YuRock> задача такова, что нужно сделать огромный YuRock> константный массив структур, .... YuRock> Конкретнее - это дерево настроек YuRock> (коих тысячи, с разными типами, свойствами и ограничениями). Вынеси их во внешний источник - файл, БД и т.д. В коде этому в любом случае не место. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 08:05 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам К слову: YuRock> задача такова, что нужно сделать огромный YuRock> константный массив структур, .... YuRock> Конкретнее - это дерево настроек YuRock> (коих тысячи, с разными типами, свойствами и ограничениями). Вынеси их во внешний источник - файл, БД и т.д. В коде этому в любом случае не место. Описания в смысле? Не согласен. Этот массив нужен только для окна настроек, там ему и место. И добавление новой нужно будет теперь с него начинать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 11:29 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Соколинский Борис YuRock Этот пример иллюстрирует только то, что у типизированных констант есть постоянный адрес, как у глобальных переменных. Не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 11:33 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRock Убедили, буду пропускать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 11:49 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
_Vasilisk_ YuRock Убедили, буду пропускать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 12:01 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
_Vasilisk_ YuRock Убедили, буду пропускать :) А если до такой - надо задуматься о том, стоит ли продолжать с ними работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 12:03 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRock _Vasilisk_ пропущено... А потом "мы тут заоптимизировали и изменили размещение локальных констант" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 12:05 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Соколинский Борис _Vasilisk_ пропущено... А потом "мы тут заоптимизировали и изменили размещение локальных констант" А если до такой - надо задуматься о том, стоит ли продолжать с ними работу . ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 12:06 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Мимопроходящий, да. Но давно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 12:07 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Мимопроходящий YuRock пропущено... Одна из причин - я не планирую переводить этот проект на новые версии дельфей . В общем, причин для перехода должно быть не мало. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 12:47 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
YuRock> Ну разве что МС отключит поддержку x86-программ Так уже же вроде (то ли в 11, то ли ХЗ). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 13:02 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам Так уже же вроде (то ли в 11, то ли ХЗ). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 13:09 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Да? Простите. Слышал звон, не проверил. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 13:10 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Соколинский Борис Я не думаю что они до такой степени идиоты, чтобы ломать гору работающего кода. А если до такой - надо задуматься о том, стоит ли продолжать с ними работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 19:10 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
_Vasilisk_ время жизни переменных поломали сейчас Не поломали, а сделали, наконец, логичным. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 19:51 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Kazantsev Alexey Не поломали, а сделали, наконец, логичным. А на совместимость - пофиг ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 20:26 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
_Vasilisk_ Ну вот и типизированные константы сделают логичными. Они уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 20:27 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Kazantsev Alexey Они уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 20:38 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
_Vasilisk_ Локальные константы в глобальной памяти? По идее, константы вообще могут не иметь физического воплощения, и то что имеем сейчас это сугубо интимные дела компилятора и таки забота об обратной совместимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 20:50 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Kazantsev Alexey По идее, константы вообще могут не иметь физического воплощения Kazantsev Alexey и таки забота об обратной совместимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 20:58 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
_Vasilisk_ По сравнению со всем остальным (тот же юникодовский string) это больше похоже на "не дошли руки" Не, обратная совместимость: https://docwiki.embarcadero.com/RADStudio/Sydney/en/Writeable_typed_constants_(Delphi)In early versions of Delphi and Object Pascal, typed constants were always writeable, corresponding to the {$J+} state. Old source code that uses writeable typed constants must be compiled in the {$J+} state, but for new applications it is recommended that you use initialized variables and compile your code in the {$J-} state. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 21:10 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
Kazantsev Alexey, Так можно было бы при {$J-} делать pure-константы ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 22:38 |
|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#18+
_Vasilisk_ Так можно было бы при {$J-} делать pure-константы Это усложняет логику работы компилятора, да и нет в этом большого смыла. А вот получать адрес типизированных констант в этом режиме стоило бы запретить. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2021, 22:50 |
|
|
start [/forum/topic.php?all=1&fid=58&tid=2036975]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 264ms |
total: | 421ms |
0 / 0 |