Использование static-переменной |
|
Добавил(а) microsin
|
Атрибут static относится к заданию класса памяти переменной. Если в теле процедуры задать такую переменную, то видна она будет только в этой процедуре, и память под нее будет выделена только один раз, при первом использовании процедуры. Кроме того, значение переменной будет сохраняться при последующих вызовах указанной процедуры, что удобно для предотвращения повторного её вызова (важно для некоторых целей, например, для обработчиков событий). Похожий эффект можно получить, если объявить переменную глобально, но получится уже не так красиво - переменная будет видна в других подпрограммах, и не исключена ошибка, связанная с дублированием имени переменной. Про классы памяти и область действия переменных можно почитать например [1]. Вот как можно это использовать (пример взят из исходников программы 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)
// ...
}
[Ссылки]
1. Классы памяти и разработка программ site:www.intuit.ru.
|