Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по switch case 
:(
    Опции темы
yngwie19
Дата 4.5.2009, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Здравствуйте объясните почему когда пишем:
Код

case WM_PAINT:
            
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd,&ps);
                    
    EndPaint(hwnd,&ps);
            
    return 0;

то компилятор ругается: 

error C2360: initialization of 'hdc' is skipped by 'case' label
see declaration of 'hdc'

initialization of 'hdc' is skipped by 'default' label
 see declaration of 'hdc'

а когда со скобками то все нормально
Код

case WM_PAINT:
{            
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd,&ps);
                    
    EndPaint(hwnd,&ps);
}            
    return 0;


Почему без скобок не хочет инициализировать созданную переменную?

PM MAIL   Вверх
Lazin
Дата 4.5.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



потому-что RTFM smile 
PM MAIL Skype GTalk   Вверх
azesmcar
Дата 4.5.2009, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



PM   Вверх
yngwie19
Дата 4.5.2009, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Спасибо за ссылку но все же интересно почему вне блока {} нельзя ?
PM MAIL   Вверх
Lazin
Дата 4.5.2009, 09:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(yngwie19 @  4.5.2009,  09:11 Найти цитируемый пост)
Спасибо за ссылку но все же интересно почему вне блока {} нельзя ?


Цитата(6.6.4)

It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that
jumps(82) from a point where a local variable with automatic storage duration is not in scope to a point where it is in
scope is ill-formed unless the variable has POD type (3.9) and is declared without an initializer (8.5).
Example:
Код

void f()
{
/ / ...
goto lx ; / / ill-formed: jump into scope of a
/ / ...
ly:
X a = 1;
/ / ...
lx:
goto ly ; / / OK, jump implies destructor
/ / call for a followed by construction
/ / again immediately following label ly
}

______________________________
(82) The transfer from the condition of a switch statement to a case label is considered a jump in this respect.

PM MAIL Skype GTalk   Вверх
azesmcar
Дата 4.5.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



yngwie19

Ошибка сама говорит, инициализация переменной пропущено меткой 'default'
например как вы предполагаете что будет работать вот этот код?
Код

int main()
{
    int c = 2;
    switch (c)
    {
    case 1:
        int x = 1;
    case 2:
        ++x;
    }
}

а если взять в {} то переменная обявленная в нем будет иметь локальную область видимости для блока заключенного в {}.
Код

int main()
{
    int c = 2;
    switch (c)
    {
    case 1:
        {
            int x = 1;
        }
    case 2:
        ++x; //тут ошибка, не видет переменную х
    }
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1164 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.