|
Инициализация полей структурных констант по умолчанию
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=58&fpage=10&tid=2036975]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 153ms |
0 / 0 |