Цитата(aesok @ Oct 8 2010, 16:02)

Проверте сами, может ли компилятор выкинуть static перемную.
Скомпилируйте код. Я бы на месте оптимизатора ее выкинул. Или по крайней мере запись в нее.
"Не болтайте ерундой!"

Не может и не должен компилятор выкидывать эту переменную. Она же
static, хоть и объявлена внутри функции. Под нее обязательно выделяется ОЗУ и она очищается при стартапе, но область видимости этой переменной - только внутри данной функции. Присвоение значения тоже не выкидывается, т.к. по сути это инициализация ее.
А вот в следующем случае компилятор наверняка оставит только последнее действие.
Код
void foo (void)
{ static int a;
a = 1;
a = 2;
a = 3;
}
И вот в таком случае цикл с проверкой на условие скорее всего заменится на бесконечный цикл. Особенно, если foo1 и foo2 будут в разных единицах (файлах) компиляции.
Код
static unsigned int cntr;
void foo1 (void)
{
cntr--;
}
void foo2 (void)
{
cntr=100;
while (cntr!=0)
foo1();
}