|
может изменяться особым, неизвестным компилятору образом. Как правило, это связано с прерываниями. При работе с этими переменными компилятор отключает оптимизацию. При отсутствии такого квалификатора, компилятор при оптизации может так упростить код, что практически он не будет работать. Хотя логически он будет выглядеть совершенно безупречно.
Т.е. нужно написать
static volatile char f;
А чтобы увидеть разницу, достаточно посмотреть сгенерированный код. И еще. В разных компиляторах (или в разных версиях) генерация и оптимизация выполняются по разному, и поэтому не следует удивляться тому, что одна и та же программа в одних случаях работает, а в других - нет.
E-mail: info@telesys.ru