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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> switch ( a , b ), что сие значит? 
:(
    Опции темы
xperienced
Дата 13.4.2011, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.2.2008

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



Здравствуйте.
Разгребаю один сишный (не ++) код и вижу такое:

Код

switch (turns++, nal) {


Взял с полки Кернигана и Ритчи, сдул пыль, открыл на операторе switch. 
Читаю: 

Цитата

switch (выражение) {
    case констант-выраж: операторы
    case констант-выраж: операторы
    default : операторы
}


Ну, думаю, ладно. Раз написано выражение, попробую так:

Код

int tmp = turns++, nal;

switch (tmp) {


и посмотрю в дебаге значение переменной tmp.
Но, к счастью, оно не скомпилилось.

Привожу полный код:

Код


u32 H264frametype(unsigned char *p)
{
  u32 nal = p[12] & 31, turns = 0;

N: switch (turns++, nal) {
     case  1:
     case  5:
     case  6: return 6 - (nal + 12) / 3;
     case 24:
     case 28:
     case 29: nal = p[13 + (30 - nal) / 3] & 31; if (turns < 2) goto N;
     default: return 4;
   }
}


В ходе дебага эта конструкция ведёт себя так, как если бы там просто было nal.
Вопрос: как это называется и где об этом написано? И главное: зачем такое надо?



PM MAIL   Вверх
bsa
Дата 13.4.2011, 17:31 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(xperienced @  13.4.2011,  16:54 Найти цитируемый пост)
как это называется и где об этом написано?

Это называется "оператор `запятая`", написано в стандарте. Результат очереди разделенной запятыми является значение полученное при самом последнем действии.

Цитата(xperienced @  13.4.2011,  16:54 Найти цитируемый пост)
зачем такое надо?

Программист хотел показать, на сколько он умен. Хотя, тем самым он показал, на сколько он глуп и недальновиден. Код надо писать так, чтобы понять его можно было без обращения к стандарту.
PM   Вверх
xperienced
Дата 14.4.2011, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.2.2008

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



спасибо
PM MAIL   Вверх
ИванМ
Дата 14.4.2011, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

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



Руки надо оторвать этому программисту. А goto в придачу улыбает.

Это сообщение отредактировал(а) ИванМ - 14.4.2011, 11:12
PM MAIL   Вверх
xperienced
Дата 14.4.2011, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.2.2008

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



Да, там код весь гоуту усыпан.
А ещё есть вот такие вещи:

Код


    unsigned int a;
    
    <занесение в а значения от 0 до 5>

    printf("%c", a["ABCXYZ"]);



Не знаю, может кому это и привычно. Я довольно долго соображал, что же это такое.
PM MAIL   Вверх
borisbn
Дата 14.4.2011, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



> А ещё есть вот такие вещи
Ставлю на то, что аффтар увольнялся и решил над тобой поиздеваться

Резюме - расстреливать надо за такое 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 14.4.2011, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



PM WWW   Вверх
xperienced
Дата 14.4.2011, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.2.2008

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



Цитата(borisbn @  14.4.2011,  19:55 Найти цитируемый пост)
Ставлю на то, что аффтар увольнялся и решил над тобой поиздеваться


Совсем нет. Это из open source проекта EvalVid.

Автор, скорее всего, старой закалки. Из тех времён когда памяти было меньше, процессоры медленнее, трава зеленее ...
Тогда гоуту и прочие прелести были в порядке вещей. 


Цитата(boostcoder @  14.4.2011,  20:40 Найти цитируемый пост)
http://evalsvc.googlecode.com/svn-history/...tmp4/mp4trace.c 


Это проект EvalSvc, автор которого беспардоннейшим образом взял исходники EvalVid, внёс незначительные изменения (в один! файл), переименовал проект и написал статью  о том какой крутой программный комплекс он реализовал. Но не будем об этом.
PM MAIL   Вверх
borisbn
Дата 14.4.2011, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



boostcoder, убил. наповал. срочно принять закон РФ, чтобы за такое расстреливать. 3 раза.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 15.4.2011, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(xperienced @  14.4.2011,  21:26 Найти цитируемый пост)
Автор, скорее всего, старой закалки. Из тех времён когда памяти было меньше, процессоры медленнее, трава зеленее ...
Тогда гоуту и прочие прелести были в порядке вещей. 

Я пишу под 8-ми битный микроконтроллер. Там тоже памяти мало, нет операций умножения и деления... И ничего. Почему-то goto мне использовать не пришлось... Да и таких заумных конструкций тоже.
Компилятору сугубо фиолетово, сколько операций напихано в строчку. Все равно он их разобьет на элементарные.
Поэтому, нечего пинять на медленные процессоры и маленькую память. Если программист дурак, то от глупостей его уже ничего не спасет.
PM   Вверх
Earnest
Дата 15.4.2011, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



bsa, это не глупость, а просто другие времена. 20 лет назад код писали не так как сейчас. Наверное, это что-то вроде останков "ассемблерного" мышления в терминах регистров и отдельных переменных... Иногда мне приходится ковыряться в своем же коде ~10-летней давности (кое-что до сих пор работает и в переписывании особо не нуждается), я его просто с трудом понимаю - настолько стиль мышления изменился. А что еще раньше было, вообще с трудом уже представляю. На моей памяти концепции несколько раз менялись... И нельзя сказать, что в этом деле наблюдаются сплошные плюсы... но это уже совсем другая тема.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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