Главная arrow Программирование arrow PC arrow Использование static-переменной Monday, September 25 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

Использование static-переменной Версия для печати
Написал microsin   
02.05.2006
Атрибут static относится к заданию класса памяти переменной. Если в теле процедуры задать такую переменную, то видна она будет только в этой процедуре, и память под нее будет выделена только один раз, при первом использовании процедуры. Кроме того, значение переменной будет сохраняться при последующих вызовах указанной процедуры, что удобно для предотвращения повторного её вызова (важно для некоторых целей, например, для обработчиков событий). Похожий эффект можно получить, если объявить переменную глобально, но получится уже не так красиво - переменная будет видна в других подпрограммах, и не исключена ошибка, связанная с дублированием имени переменной. Про классы памяти и область действия переменных можно почитать, например, здесь - http://www.intuit.ru/department/pl/c/10/. Вот как можно это использовать (пример взят из исходников программы putty, файл window.c) - процедура enact_netevent вызывается в ответ на событие WM_NETEVENT, а переменная reentering сохраняет свое значение от вызова к вызову enact_netevent:

static void enact_netevent(WPARAM wParam, LPARAM lParam)
{
 static int reentering = 0;
 extern int select_result(WPARAM, LPARAM);
 int ret;

 if (reentering)
   return;  //отмена действий при повторном вызове enact_netevent

 reentering = 1;
 //тут действия, не допускающие одновременной обработки несколькими вызовами
 ret = select_result(wParam, lParam);
 reentering = 0;
 
//другие действия, не критичные к повторному вызову (обработка значения ret)
 //  ...

}
 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017