Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
J10
4 / 4 / 0
Регистрация: 30.04.2011
Сообщений: 50
#1

Убрать предупреждения на break в операторе switch(...) - C++

28.05.2011, 01:43. Просмотров 848. Ответов 4
Метки нет (Все метки)

Никак не пойму, как можно перекроить этот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//***************************************************************************
unsigned long flength (unsigned short type, unsigned long length)
{
        switch(type)
                {
                case 1:
                        return (sizeof(BYTE)*length);
                        break;
                case 2:
                        return (sizeof(char)*length);
                        break;
                case 3:
                        return (sizeof(short)*length);
                        break;
                case 4:
                        return (sizeof(long)*length);
                        break;
                case 5:
                        return (sizeof(long)*2*length);
                        break;
                }
}
чтобы не выдала предупреждений:

Код
  [C++ Warning] TiffMethod.h(8): W8066 Unreachable code
  [C++ Warning] TiffMethod.h(11): W8066 Unreachable code
  [C++ Warning] TiffMethod.h(14): W8066 Unreachable code
  [C++ Warning] TiffMethod.h(17): W8066 Unreachable code
  [C++ Warning] TiffMethod.h(20): W8066 Unreachable code
  [C++ Warning] TiffMethod.h(22): W8070 Function should return a value
Только как нибудь так:

C++
1
2
3
4
5
6
7
unsigned long flength = 0;
 
if (type == 1)
       flength = sizeof(BYTE)*length;
else
       if ... // И так до (type == 5)
result = flength;
Или есть способ проще?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2011, 01:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Убрать предупреждения на break в операторе switch(...) (C++):

While{switch{switch{break;}}} break выходит из while - C++
В общем необходимо конструкцию switch запускать в цикле, в каждом case X: стоит свой break;, да бы выполнился один case, а не все. Проблема...

Условие в операторе switch - C++
Всем привет, есть коД: switch(TYPE) { case 1: total = number1 + number2; cout << "\n" <<...

C++, ошибка в операторе switch (case) - C++
Доброго времени суток! Ребят, такая тема: в C++ начала изучать операторы switch, case. И вот у меня заступорилась программа: на case '10'...

Чудо-ошибка в операторе switch - C++
простой кусок кода, если case 2: переместить с конца оператора немнго вперед.т.е. поменять местами с 1 из case x:, то компилятор выдает: ...

В операторе switch всегда срабатывает default - C++
Привет всем, вот такая проблема ввожу указанные в case буквы, в любом случий срабатывает default, почему так? #define WINVER 0x0501 ...

Problem - switch - не работает break - C++
Возникла проблема со switch. Всегда при вводе символа выполняется и case, и default. то ли break не работает, то ли еще что. void...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.05.2011, 02:00 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
unsigned long flength (unsigned short type, unsigned long length)
{
    switch(type)
    {
    case 1: return (sizeof(BYTE)*length);
    case 2: return (sizeof(char)*length);
    case 3: return (sizeof(short)*length);
    case 4: return (sizeof(long)*length);
    case 5: return (sizeof(long)*2*length);
    default: return 1;
    }
}
1
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.05.2011, 02:00 #3
брейки никогда не достигнутся... -> их можно убрать.
1
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,702
28.05.2011, 05:19 #4
немного другой подход
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdint.h>
 
uint32_t fl(uint16_t type, uint32_t len){
    static const uint32_t sizes[] = { sizeof(uint8_t), sizeof(char), sizeof(short), sizeof(long), sizeof(long) * 2 };
    return ( type < 1 || type > sizeof(sizes) / sizeof(*sizes) ) ? 0 : len * sizes[type - 1];
}
 
#define LEN 1
 
int main(void){
    int t;
    
    while ( printf("Type: ") && scanf("%d", &t) == 1 )
        printf("Size: %d\n", fl(t, LEN));
    
    return 0;
}
2
bigredcat
365 / 312 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
28.05.2011, 06:49 #5
Цитата Сообщение от Maxwe11 Посмотреть сообщение
default: return 1;
Не суть вопроса, но думаю, что если не найдено совпадений, то в данном случае не уместно возвращать 1.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2011, 06:49
Привет! Вот еще темы с ответами:

Callback + switch. Break needed - C++
typedef int (*CallbackType)(); void Queue_list::add_elem(CallbackType in_key){ unit* temp = new unit; temp-&gt;key = in_key; ...

Для чего нужны break и default в switch - C++
что означает строка break и default в codeblocks? пример: #include using namespace std; int main() {

Исправить ошибку: break statement not within loop or switch - C++
#include &lt;iostream&gt; using namespace std; int main() { int x; {cout &lt;&lt; &quot;Grade&quot;; cin &gt;&gt;x; ...

Как выйти из цикла, если break относится к switch? - C++
Как выйти из цикла в конструкции while(условие) { switch(i) case(!условие): break; default break; }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.05.2011, 06:49
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru