Цитата(Sergio66 @ Mar 25 2005, 11:02)
Цитата(KRS @ Mar 24 2005, 14:15)
надо описать как volatile
extern volatile тип K
А что, компилятор тоже без пол-литры не может понять, чего я хочу, и потому выбрасывает весь блок?
Да, кстати, действительно, объявление volatile решило проблему.
Компилятор как раз делает правильно! так и должно быть. Вот если бы вы вызывали внутри цикла функцию тогда все ок! а если в прерывании переменная меняется она должна быть volatile
А весь цикл выбросился скорее из-за того, что начальное значение перед ним присваивалось, а потом функции не вызывались и модификации не было.
Иначе бы всетки остался бесконечный цикл
Например
A=0
while (A) {
....
}
выбрасыватеся
A=1
while (A) {
....
}
делается бесконечным
но вот если вызвать не инлайн функцию
A=0
f();
while (A) {
f();
....
}
то тогда выкидывать ничего компилер не будет
или надо объявлять volatile