Непонятка с терминалом - страница 2

 
dimontus:
Так и пришлось делать, но все равно это через одно место...

Это не через одно место, а концептуально правильно. Мы специально ввели функции init и deinit, чтобы можно было явно назначать и сбрасывать внешние переменные.
 
Если переменная объявлена внутри функции, то как то странно что после зевершении работы функции переменная остается в памяти.
Цитата из хелпа
"Переменная, объявленная внутри какой-либо функции, является локальной. Область видимости локальной переменной ограничена пределами функции, внутри которой она объявлена. Локальная переменная может быть проинициализирована при помощи любого выражения. Инициализация локальной переменной производится каждый раз при вызове соответствующей функции. Локальные переменные располагаются во временной области памяти соответствующей функции."

Таже предполагалось что и глобальные переменные ведут себя так же.
Нужно хотя бы осветить это в хелпе а то строчка "Инициализация глобальных переменных производится однократно перед выполнением функции init()." говорит о малом. Так же ни где не поясняется что инициализация проводиться один раз при прикреплении эксперта к графику или при запуске терминала.
Отсюда все непонятки.

P.S. static переменные сохраняют свое значение после завершения функции.
 

Автору топика можно просто в init делать инициализации всех переменных эксперта и в том числе устанавливать размер массива в 0. Либо все переменные инициализировать нужными значениями в том числе размер массива делать таким каким он должен быть при старте а не использовать его размер при старте(он не сбрасывается) и увеличивать его на единицу . Это можно делать потом в функции start.

Вообще прикольно в документации куда они отсылают всех написано одно а в реальности другое поведение. Я поэтому уже давно сам проверяю то что написано в документации потмоу то бывают расхождения в поведении. Чукча он не читатель он .. проверятель :) Доверяй MQ но проверяй аднака :)

 
Автор уже все переделал :-) просто думал это глюк, а оказалось он оно как :)
 

Так глобальные переменные и переинициализирутся. Но только при перезагрузке эксперта. Если эксперт всё время оставался в памяти, то и значения переменных, объявленных на глобальном уровне, не трогаются. Эти переменные не принадлежат ни одной функции - они принадлежат эксперту. А init и deinit - это всего лишь функции.

На самом деле такое поведение является фичей, а не багом. Другой вопрос - некоторая неполнота документации. Вот такие дискуссии и позволяют нам уточнять пропущенные в документации детали.

 
фичей это сложно назвать :-) особенностью, другое дело.
 
Фича - это feature.
 
Rosh:
Фича - это feature.
:-) думал всегда что Фича должна быть полезной, хотя кому как.

Может здесь ответите, какой шрифт используеться терминалом для вывода коментариев и принта?
 
dimontus:
Rosh:
Фича - это feature.
:-) думал всегда что Фича должна быть полезной, хотя кому как.

Фича - это и есть особенность. Попробуем убрать именно эту фичу (специально для Вас), большой шум в сообществе поднимется. Вы можете не пользоваться этой особенностью, и это не значит, что она никому не нужна. Тем более, что решение соответствует золотому правилу - не пользоваться умолчаниями и задавать все значения явно. Способствует дисциплине понимаете ли.

Может здесь ответите, какой шрифт используеться терминалом для вывода коментариев и принта?

Для комментариев используется Tahoma, для вывода в логах тот шрифт, который установлен в Вашей системе для лист-контролов.
 
Буду стараться быть более дисциплинированным :-)
Спасибо.
Причина обращения: