На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> const в заголовках процедур и функций!??!
    описание констант в заголовках процедур и функций!!! пожалуйста расскажите поподробнее об этом. назначение и использование! заранее благодарен!
      Это целесообразно при использовании таких параметров, как String и пользовательских, которые занимают более 4 байт. Но изменять при этом внутри процедуры их нельзя (если не использовать ассемблер :) . При использовании обычных параметров, значение копируется в стек, и процедуре передаётся адрес переменной в стеке (или само значение, если это Byte/Word/Longint и т.п). Если параметр объявлен как константа, паредаётся адрес переменной (точно так же, как и при использовании конструкции var), но изменять его нельзя (этим const отличается от var). А зачем это надо? Экономия стека - раз, немного меньший размер проги - два. Но это, ещё раз повторюсь, бессмысленно делать при использовании типов Byte/Shortint/Word/Integer/Longint/Real(тоже по-моему).
      -------------------------------------------------------------------
      Короче, более простыми словами:
      Procedure Me(S: String); {1}
      Procedure Me(var S: String); {2}
      Procedure Me(const S: String); {3}
      В первом случае переменную S внутри процедуры можно изменять как захочется, но переменная, которая была передана в качетсве параметра не изменится (т.е. при вызове Me(A) переменная A не изменится после выполнения процедуры). При запуске процедура потребует 256 с лишним байт стека (на время выполнения).
      Во втором случае переменную S тоже можно менять, но при этом измениться и та переменная, которая была задана в качетсве параметра (т.е. при запуске Me(A) переменная A может быть изменена после вызова процедуры, поэтому вызов типа Me('String') недопустим, т.к. 'String' - не переменная). Что касается стека, то тут требуется всего лишь 4 байта.
      В третьем случае переменную S внутри процедуры менять нельзя (её можно только юзать). Хотя в этом случае можно написать Me('String'), т.к. не важно 'String' - это переменная или нет, всё равно менять её никто не будет (это ещё одно отличие от var). Стека требуется 4 байта.
      Короче, мораль сей басни такова: если используешь параметры большого размера (строка, например) и менять внутри процедуры ты их не собираешься, лучше использовать const (чем без const :) .
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,1974 ]   [ 16 queries used ]   [ Generated: 26.04.24, 09:34 GMT ]