информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяSpanning Tree Protocol: недокументированное применениеСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Всем спасибо, и еще маленький вопрос :) 29.03.03 11:01  Число просмотров: 992
Автор: wade Статус: Незарегистрированный пользователь
<"чистая" ссылка>
ОК !! Всем спасибо :))
Получается никак нельзя сделать со switch да??
Просто если заменять его IF, то получится очень много ветвлений (я хотел в switch много case'ов наставить). Это не повредит... эээ... производительности? ;)
И еще раз сенькс!
<programming>
[C++] Switch меня не понимает 28.03.03 21:48  
Автор: wade Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Ээээээ... даже стыдно писать-то ;)
В операторе switch в case нельзя использовать функции?
Например:

char str[] = "privet";
int number = 0;
switch (number)
{
case (strcmp(str, "privet")): cout << "Проканало !!!" ; break;
default: cout << "Не совсем проканало"; break;
}

Ведь strcmp должна вернуть 0, и тогда должно выполниться 1-е условие... Но компилятор говорит: constant expression required in function main()
В чем проблема? Спасибо всем ;)
[C++] Switch меня не понимает 28.03.03 22:01  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> Ээээээ... даже стыдно писать-то ;)
> В операторе switch в case нельзя использовать функции?
> Например:
>
> char str[] = "privet";
> int number = 0;
> switch (number)
> {
> case (strcmp(str, "privet")): cout <<
> "Проканало !!!" ; break;
> default: cout << "Не совсем проканало"; break;
> }
>
> Ведь strcmp должна вернуть 0, и тогда должно выполниться
> 1-е условие... Но компилятор говорит: constant expression
> required in function main()
> В чем проблема? Спасибо всем ;)

Tebe zhe compiler govorit v chem problema!
[C++] Немного более подробный ответ :) 28.03.03 22:44  
Автор: Sandy <Alexander Stepanov> Статус: Elderman
<"чистая" ссылка>
> > Ээээээ... даже стыдно писать-то ;)
> > В операторе switch в case нельзя использовать функции?
> > Например:
> >
> > char str[] = "privet";
> > int number = 0;
> > switch (number)
> > {
> > case (strcmp(str, "privet")): cout <<
> > "Проканало !!!" ; break;
> > default: cout << "Не совсем проканало";
> break;
> > }
> >
> > Ведь strcmp должна вернуть 0, и тогда должно
> выполниться
> > 1-е условие... Но компилятор говорит: constant
> expression
> > required in function main()

Здесь компилер тебе говорит: требуется выражение-константа, т.е. вместо выражения, которое рассчитывается на этапе ран-тайм, должно стоять выражение, которое можно рассчитать на этапе компиляции. В данном случае вместо strcmp(str, "privet") должна стоять константа.

> > В чем проблема? Спасибо всем ;)
>
> Tebe zhe compiler govorit v chem problema!
[C++] Немного более подробный ответ :) 29.03.03 02:50  
Автор: alien <Андрей> Статус: Member
<"чистая" ссылка>
Просто замени эту конструкцию оператором if:
char str[] = "privet"; int number = 0; if (strcmp(str, "privet") == number) cout << "Проканало !!!" else cout << "Не совсем проканало";
Всем спасибо, и еще маленький вопрос :) 29.03.03 11:01  
Автор: wade Статус: Незарегистрированный пользователь
<"чистая" ссылка>
ОК !! Всем спасибо :))
Получается никак нельзя сделать со switch да??
Просто если заменять его IF, то получится очень много ветвлений (я хотел в switch много case'ов наставить). Это не повредит... эээ... производительности? ;)
И еще раз сенькс!
Всем спасибо, и еще маленький вопрос :) 29.03.03 18:18  
Автор: vh <Дмитрий> Статус: Member
Отредактировано 29.03.03 18:22  Количество правок: 3
<"чистая" ссылка>
> ОК !! Всем спасибо :))
> Получается никак нельзя сделать со switch да??
> Просто если заменять его IF, то получится очень много
> ветвлений (я хотел в switch много case'ов наставить). Это
> не повредит... эээ... производительности? ;)
> И еще раз сенькс!
Язык Си является относительно низкоуровневым языком и поэтому данная конструкция тоже реализована на уровне проще некуда.


А для того чтобы делать какты хочешь надо юзать след. конструкции:
if(условие1)
   что делать1;
else if(условие2)
   что делать2;
else if(условие3)
  что делать3;
.....
else
  что делать по дефолту;

---

нормальный вариант, производительности не повредит.
Всем спасибо, и еще маленький вопрос :) 29.03.03 20:08  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
> > ОК !! Всем спасибо :))
> > Получается никак нельзя сделать со switch да??
> > Просто если заменять его IF, то получится очень много
> > ветвлений (я хотел в switch много case'ов наставить).
> Это
> > не повредит... эээ... производительности? ;)
> > И еще раз сенькс!
> Язык Си является относительно низкоуровневым языком и
> поэтому данная конструкция тоже реализована на уровне
> проще некуда.
> А для того чтобы делать какты хочешь надо юзать след.
> конструкции:
> >
> if(условие1)
>    что делать1;
> else if(условие2)
>    что делать2;
> else if(условие3)
>   что делать3;
> .....
> else
>   что делать по дефолту;
> 

--- >

> нормальный вариант, производительности не повредит.

На самом деле надо уточнить постановку. В вопросе был такой код:

char str[] = "privet";
int number = 0;
switch (number)
{
case (strcmp(str, "privet")): cout << "Проканало !!!" ; break;
default: cout << "Не совсем проканало"; break;
}

Если даже в развитии кода, где планировалось втыкать много case, речь пойдет об аналогичном сравнении результата какой-нибудь функции с заранее известными значениями, то никто мешает воткнуть эту функцию до switch, и потом проверять уже как положено. Несколько тактов этим, пожалуй, удастся сэкономить :)
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach