IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> C++, Непонятная ошибка
TS*
сообщение 20.01.2007 23:01
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 71
Пол: Мужской
Реальное имя: Max

Репутация: -  0  +


Выдает ошибку "Case bypasses initalization of local variable", если закоментировать кейс "DIV" или "Default" ошибка пропадает. Может быть баг компилятора (Borland C++ for DOS)?:

enum token_value {
NAME, NUMBER, END,
PLUS='+', MINUS='-', MUL='*', DIV='/',
PRINT=';', ASSIGN='=', LP='(', RP=')'
};
token_value curr_tok;

double term();
double prim();
double expr();
double error(const char* s);
token_value get_token();

double term() {
double left=prim();
for(;;)
switch(curr_tok) {
MUL:
get_token();
left*=prim();
break;
DIV:
get_token();
double d = prim();
if(d==0) return(error("Division by zero"));
left/=prim();
break;
default:
return(left);
}
}

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 20.01.2007 23:13
Сообщение #2


Гость






Цитата
Может быть баг компилятора
Да что ты? Какой же баг компилятора, если Стандарт не позволяет обходить неинициализированные переменные? У тебя scope (область видимости переменной d) это что? Весь блок switch, правда? Представь себе, что будет, например, если ты перейдешь по default, и попытаешься использовать переменную d, которая, как правильно говорит компилятор, НЕ инициализирована? (то, что ты ее не используешь, компилятору неинтересно. Факт тот, что ты МОЖЕШЬ ее использовать)...

Что делаем? Либо
1) описываем d видимой во всей функции:
double term()   {  
double d, left=prim();
...
DIV:
get_token();
d = prim();
...
, либо
2) делаем внутренний блок, за пределами которого d невидима:
	 DIV:
{
get_token();
double d = prim();
if(d==0) return(error("Division by zero"));
left/=prim();
}
break;


Я бы выбрал второй вариант...
 К началу страницы 
+ Ответить 
TS*
сообщение 20.01.2007 23:34
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 71
Пол: Мужской
Реальное имя: Max

Репутация: -  0  +


Спасибо volvo и мисс_граффити, исправил на второй вариант
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.07.2025 13:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"