{$WRITEABLECONST ON/OFF}
Модератор: Модераторы
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Иван Шихалев писал(а): Директива {$WRITEABLECONST ...}, работает так же, как в Delphi, хотя и недокументирована...
лезем в справку и читаем:
Type Switch
Syntax {$J+} or {$J-}
{$WRITEABLECONST ON} or {$WRITEABLECONST OFF}
Default {$J-}
{$WRITEABLECONST OFF}
Scope Local
The $J directive controls whether typed constants can be modified or not. In the {$J+} state, typed constants can be modified, and are in essence initialized variables. In the {$J-} state, typed constants are truly constant, and any attempt to modify a typed constant causes the compiler to report an error.
Writeable consts refers to the use of a typed const as a variable modifiable at runtime. For example:
const
foo: Integer = 12;
begin
foo := 14;
end.
With $WRITEABLECONST OFF, this code produces a compile error on the assignment to the foo variable in the begin..end block. To fix it, change the const declaration to a var declaration.
In early versions of Delphi and Borland 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.
STAKANOV писал(а): Бред полнейший. Зачем это нужно не понятно. Похоже разарботчики уже просто развлекаются. Константа на то и константа, что ее значение изменять нельзя.
деньжат им подкинь, они будут нужное делать... а пока это бесплатно и с исходниками, то нужно принимать С БЛАГОДАРНОСТЬЮ ТО, что дают
Бред полнейший. Зачем это нужно не понятно. Похоже разарботчики уже просто развлекаются. Константа на то и константа, что ее значение изменять нельзя
Не, мужики, типизированная константа - это, грубо говоря, инициализированная переменная, а нетипизировнная - "истинная" и при компиляции вместо ее упоминания подставляется значение. Вот поэтому ее и не получается изменить
См. описание формата .bss разные там ...
А тут возможность и типизированную не разрешается менять. Как это работает еще не смотрел.
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Вот в чем дело:
Формат COFF делит объектный код на разделы. Раздел .text содержит выполнимый код, раздел .data - переменные с начальными значениями, а раздел .bss - неициализированные данные
То есть, неинициализированные переменные (var) создаются в разделе .bss
Типизированные константы в .dat
А просто константы - нигде не хранятся, а просто заменяются значениями во время компиляции
Формат COFF делит объектный код на разделы. Раздел .text содержит выполнимый код, раздел .data - переменные с начальными значениями, а раздел .bss - неициализированные данные
То есть, неинициализированные переменные (var) создаются в разделе .bss
Типизированные константы в .dat
А просто константы - нигде не хранятся, а просто заменяются значениями во время компиляции
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
