goto в С++.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
asteroid7
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Re: goto в С++.

Сообщение asteroid7 »

avreal писал(а):

Код: Выделить всё

#define BREAKABLE_BLOCK \
  for( uint8_t _breakable_block_ = 1; _breakable_block_ ; _breakable_block_ = 0)

Вот за это спасибо! Красиво и просто.
А то всё по старинке: do while 0...
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: goto в С++.

Сообщение avreal »

asteroid7 писал(а):Вот за это спасибо! Красиво и просто.
А то всё по старинке: do while 0...
Выбросьте и забудьте.
Это всё был выпендрёж и заразная болезнь (консилиум работает начиная отсюда)
а теперь и Вы заразились...
Вам это уже кажется простым, да ещё и красивым...
Тогда как на самом деле это «кошмар».

Равно как и двухсимвольные константы, сократившие раза в полтора код разбора команд в одном мониторе на одной в те времена распространённой 16-битной архитектуре... Я «специально спросил» неизвестного мне автора путём чтения исходников и выяснил, что у него в голове были вот такие заразные штучки...
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: goto в С++.

Сообщение DX168B »

А я так организовывал. Может меня и отпинают за такой код, но результат соответствует тому, что мне надо было получить. GOTO я уже стопицот лет ни где не применял. Было конечно кое-где, но это редко.

Код: Выделить всё

//********************************************************************
int WriteLog(int wr)
{
   char *evnt="Error Log";
   char dt[10], tm[10];
   _strdate(dt);
   _strtime(tm);
   if (log[0] != 'e'){return 0;}
   if (wr == 1){evnt = "Access granted.";}
   if (wr == 2){evnt = "Access denied! Invalid password.";}
   if (wr == 3){evnt = "Packet error!";}
   if (wr == 4){evnt = "COM Port Error!";}
   if (wr == 5){sprintf(evnt, "Access denied to level %d !", level);}
   if (wr == 6){sprintf(evnt, "Unknown level: %d", level);}
   if (wr == 7){sprintf(evnt, "Access dened! User disabled!");}
   if (wr < 1||wr > 7){sprintf(evnt, "Unknown LOG code!");}

   sprintf(query, "INSERT INTO `%s`.`logs` SET `date`='%s', `time`='%s', `user`='%s', `event`='%s', `db`='%s', `table`='null'", dtbs, dt, tm, usr, evnt, dtbs);
   if (mysql_query(&mysql, query))
   {
      SetConsoleTextAttribute(console, FOREGROUND_RED | FOREGROUND_INTENSITY);
      display(" Ошибка запроса!");
      fprintf(stderr, " Error: %s\n ", mysql_error(&mysql));
      delete evnt;
      return 1;
   }
   delete evnt;
   return 0;
}

//*******************************************************************
int DBquery(const char *id)
{
   MYSQL_ROW row;
   unsigned int i=0;
   //----------
   sprintf(query, "SELECT * FROM users WHERE ID=%s", id);
   //----------
   if (mysql_query(&mysql, query))
   {
      SetConsoleTextAttribute(console, FOREGROUND_RED | FOREGROUND_INTENSITY);
      display(" Ошибка запроса!");
      fprintf(stderr, " Error: %s\n", mysql_error(&mysql));
      return 1;
   }
   //----------
   if (!(res = mysql_store_result(&mysql)))
   {fprintf(stderr, " Error: %s\n", mysql_error(&mysql));return 1;}
   //----------
   while((row = mysql_fetch_row(res)))
   {
      for (i=0;i<mysql_num_fields(res);i++)
      {
             if (i==0){for (int a=0;a<20;a++){idd[a]=row[i][a];}}
         else if (i==1){for (int a=0;a<20;a++){usr[a]=row[i][a];}}
         else if (i==2){for (int a=0;a<20;a++){psw[a]=row[i][a];}}
         else if (i==3){st = row[i][0];}
         else if (i==4){l1 = row[i][0];}
         else if (i==5){l2 = row[i][0];}
         else if (i==6){l3 = row[i][0];}
         else if (i==7){l4 = row[i][0];}
      }
   }
   //----------
   if (!mysql_eof(res)){fprintf(stderr," Error: %s\n", mysql_error(&mysql));return 1;}
   //----------
   mysql_free_result(res);
   delete row;
   //----------
   return 0;
}

Кому как, но этот код мне понятен.
I am DX168B and this is my favourite forum on internet!
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: goto в С++.

Сообщение Мастер Ломастер »

Errorkpi писал(а):
avreal писал(а):#define BREAKABLE_BLOCK \

Мда....
Господин знает толк в извращениях..... :tea:
это не панацея, это протез на здоровую ногу. достаточно только вставить внутрь этого BREAKABLE_BLOCK оператор switch - и снова думай, как без goto выйти наружу... и ничем не лучше простого do { ... } while(0);
битва с дураками проиграна, победители торжествуют. слава победителям!
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: goto в С++.

Сообщение Мастер Ломастер »

avreal писал(а):Вам это уже кажется простым, да ещё и красивым...
Тогда как на самом деле это «кошмар».

Равно как и двухсимвольные константы, сократившие раза в полтора код разбора команд в одном мониторе на одной в те времена распространённой 16-битной архитектуре... Я «специально спросил» неизвестного мне автора путём чтения исходников и выяснил, что у него в голове были вот такие заразные штучки...
особенно если вспомнить, что int по стандарту Си не является типом с фиксированным размером в битах, т.е. на персоналке он 32-битный и в него уже влезет 4 символа, а не два... и программа на Си (между прочим, языке, декларирующем платформонезависимость) уже не может компилироваться без правки на разных платформах...

имхо, трюки - это лишь трюки, которые позволяют одним заработать немножко денег, а другим - развлечься, но для подавляющего большинства вредны и даже опасны.
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: goto в С++.

Сообщение avreal »

Мастер Ломастер писал(а):ничем не лучше простого do { ... } while(0);
Ну так внутри любого «и так нужного» for(;;) или do while() если switch поставить, то та же проблема будет.
А по поводу того, что в таких местах такой for не лучше do-while -- cкажите тут
http://forum.sources.ru/index.php?s=0d3 ... pic=341130
(9-е сообщение темы, конец блока кода)

Заодно гляньте atomic.h из avr-libc от avr-gcc.

Мастер Ломастер писал(а):особенно если вспомнить, что int по стандарту Си не является типом с фиксированным размером в битах, т.е. на персоналке он 32-битный и в него уже влезет 4 символа, а не два... и программа на Си (между прочим, языке, декларирующем платформонезависимость) уже не может компилироваться без правки на разных платформах...
Но не меньше 16 бит, так что два символа влезут всегда.
А про не-16-бит-int я написал ещё в том примере и сразу написал, как это место сделать переносимым по длине int. Остаётся ещё ENDIANNESS.
Написание программ, переносимых по размеру int, по размеру указателя и по ENDIANNES -- само по себе не всегда простая тема (вон как FTDI учудило на том, что 64-бит линукс и 64 бит вин -- разные 64 бит).
А это место с двухсимвольными константами не такое уж и страшное.

Мастер Ломастер писал(а):имхо, трюки - это лишь трюки, которые позволяют одним заработать немножко денег, а другим - развлечься, но для подавляющего большинства вредны и даже опасны.
Ну да, соглдасен, ножички и спички опасны для детей, огнестрельное оружие -- для большинства граждан. Нужен определённый уровень владения.
А вот со словом «трюки» не согласен. По той же причине «уровня владения».
Недавно толи на этом форуме, толи на другом -- как раз в разговоре про массивы я вспоминал -- для кого-то определение числа элементов массива через sizeof(array)/sizeof(array[0]) было трюком. А для знающих язык это рутина.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: goto в С++.

Сообщение Мастер Ломастер »

avreal писал(а):А по поводу того, что в таких местах такой for не лучше do-while -- cкажите тут
и к чему C++ приплетать в разговор?

avreal писал(а):Заодно гляньте atomic.h из avr-libc от avr-gcc.
а че на него глядеть? используется фича, встроенная ТОЛЬКО в GCC, и потому непереносимая. равно как PORTB.0 в CodeVision. нет смысла продолжать возводить трюки в ранг сверхмастерства. сверхмастерство - это когда без трюков делается все, что необходимо.

avreal писал(а):для кого-то определение числа элементов массива через sizeof(array)/sizeof(array[0]) было трюком. А для знающих язык это рутина.
пример какой-то неубедительный... это ж каким "гуру" надо быть, чтобы в своей собственной программе не знать размер статического массива и определять его какими-то математическими вычислениями?!
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: goto в С++.

Сообщение avreal »

Мастер Ломастер писал(а):
avreal писал(а):А по поводу того, что в таких местах такой for не лучше do-while -- cкажите тут
и к чему C++ приплетать в разговор?
А в С++ поведение for(;;) и do-while() чем-то отличается от такового в С?

Мастер Ломастер писал(а):это ж каким "гуру" надо быть, чтобы в своей собственной программе не знать размер статического массива и определять его какими-то математическими вычислениями?!
Вы не понимаете, о чём речь, или понимаете, но хочется поспорить?
Я не знаю размер этого массива и не собираюсь его знать:

Код: Выделить всё

command_t commands[] = {
   { , , , },
   { , , , },
   { , , , },
#ifdef SOME_CONDITION
   { , , , },
#endif
   { , , , },
#ifdef DEVICE_TYPE_2
   { , , , },
   { , , , },
   { , , , },
#endif
#ifndef NDEBUG
   { , , , },
   { , , , },
#endif
};
Возможно, что гуру вашего уровня, изменив в настройках проекта опции его сборки либо добавив пару команд, не задумываясь впишут куда надо новый размер массива.
Но людям попроще легче написать sizeof(commands)/sizeof(commands[0]) и заставить компилятор пересчитывать при любых изменениях в проекте.
Про разного рода ограничители массива спецзаписями в конце знаю и сам иногда советую, но бывает так, что размер удобнее (и всегда экономичнее).
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: goto в С++.

Сообщение Мастер Ломастер »

я не вникал глубоко в рекомендованную ссылку. но подозреваю, что основной смысл хитростей с С++ в том, что благодаря локальной переменной цикла for получается доступ к методам объекта какого-то класса... и эта переменная при досрочном выходе из цикла уничтожается с вызовом деструктора... (это предположение, т.к. повторяю - в смысл не вникал) собственно, перебор foreach на это намекает... и в таком контексте с другими вариантами цикла это не прокатит, хотя я не знаю - что там про локальные экземпляры классов в циклах С++ говорит?

но все равно это мне кажется каким-то извратом. можно сделать просто, но делается с переподвыподвертом - подозреваю, чтобы потом иметь возможность всем объяснять, демонстрируя наличие тех самых знаний (писал ранее). да, скажем, я до этого возможно не додумался бы, но следует из этого, что я не решил бы поставленную задачу?

avreal писал(а):Вы не понимаете, о чём речь, или понимаете, но хочется поспорить?
avreal писал(а):Возможно, что гуру вашего уровня
признаюсь, порой не понимаю :) но не спорю, а пытаюсь вынудить вас на пояснения - чтобы понять, наконец... и вы мне явно льстите, называя меня гурой :) возможно, когда-нибудь нескоро, я смогу достичь вашего уровня десятилетней давности... если смогу смириться с чудесами Си :)))
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: goto в С++.

Сообщение avreal »

Мастер Ломастер писал(а):я не вникал глубоко в рекомендованную ссылку. но подозреваю, что основной смысл хитростей с С++ в том, что благодаря локальной переменной цикла for получается доступ к методам объекта какого-то класса... и эта переменная при досрочном выходе из цикла уничтожается с вызовом деструктора...
Локальную переменную и в С можно сделать в любом блоке, в С++ отработают конструкторы-деструкторы:

Код: Выделить всё

void foo()
{
    some_type_t a;
    {
        some_type_t  b; // ещё более локальная
    }
    // тут b уже пропала, в С++ ещё и отработал деструктор
}
так что это не принципиально.
В макросах законченные куски кода часто заворачивают в do {} while(0), создавая внутри локальные переменные (для которых в С++ будет все то же с конструкторами/деструкторами). Но то законченные куски кода.

В С++ отработает еще и деструктор переменной, созданной в выражении инициализации for(;;), но в данном случае речь не об этом.

Только for() {} даёт возможнсть сделать заголовок для куска кода, а сам код прилепить потом после него. Но при этом задать кусочеки кода, выполняемые до и после после прилепленного фрагмента.
В примере по ссылке используется именно эта возможность.
Она же использовалась в моём примере с BREAKABLE_BLOCK
Возможность задать весь заголовок перед блоком кода удобна и тем, что сразу видно, что к чему. И тем, что не вынуждает писать что-то ещё в конце блока -- и это тоже используется как в моём примере, так и в примере с исходников.ру. Можно же было задать два макроса, BOOST_FOREACH_BEGIN и BOOST_FOTEACH_END, использовав во втором в том числе } while(0) как супер-скобку. Или BREAKABLE_BLOCK_BEGIN / _END (какая разница, писать комментарий после do { о том, что это не цикл, или макрос с сомодокументированным именем).
Но именно этого и хотелось избежать.

Мастер Ломастер писал(а):можно сделать просто
То, что Вам кажется, что можно сделать просто -- может означать то, что Вы просто не видите, в чём сложность. Ну как с размером статического массива...

Мастер Ломастер писал(а):но делается с переподвыподвертом - подозреваю, чтобы потом иметь возможность всем объяснять, демонстрируя наличие тех самых знаний
Да, да, я знаю, а еще зеркалки -- чистые понты для демонстрации наличия денег, в мобилке аппарат и побольше мегапикселей бывает.
В "Жестоком романсе" сцена отличная с переклеиванием этикеток на бутылках с винами.
И у Райкина про соседа смогонщика -- «Ни разу не видел, чтобы он за водкой бегал! Значит сам гонит!»
Уж извините, но ассоциации с Вашими словами только такие.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: goto в С++.

Сообщение Мастер Ломастер »

avreal писал(а):Да, да, я знаю, а еще зеркалки -- чистые понты для демонстрации наличия денег, в мобилке аппарат и побольше мегапикселей бывает.
В "Жестоком романсе" сцена отличная с переклеиванием этикеток на бутылках с винами.
И у Райкина про соседа смогонщика -- «Ни разу не видел, чтобы он за водкой бегал! Значит сам гонит!»
Уж извините, но ассоциации с Вашими словами только такие.

ассоциации - да пожалуйста, я не против :)))
а по поводу, в частности, зеркалок - так ведь это правда! чистая правда! 90% тех, кто покупает фотоаппарат, гонятся за совершенно непонятными им численными характеристиками, а потом делают 100% снимков в режиме полный автомат, многие даже зумом не пользуются! спросите любого владельца навороченной иномарки: не считая режима парковки и заднего хода, сколько раз он переключал режимы коробки-автомата? какие там вообще режимы есть? какими наворотами он пользуется вообще? думаю, ответ прогнозируем и неудивителен... понты, чистые понты... у васи понт зеркалка, у пети - кадиллак, у вас - Си с плюсами и без... :))) это естественно и понятно.

а по поводу вашего блока с for - тут ведь проблема лишь в одном: создавая макросы, которые как-то изощренно организуют код, вы отдаляете смысл элемента от места его использования. ситуация та же, что и с локальной переменной: ведь принято считать, что локальную переменную правильнее описывать и определять как можно ближе к тому месту, где она требуется, чтобы не "потерять" ее в коде. так и тут: есть макрос, черт его знает, в каком хидере определенный, по названию которого создается впечатление, что это блок, из которого можно выскочить break-ом, но о том, что внутри есть переменная, случайно изменив которую можно навсегда там остаться или получить кучу "странных" варнингов или ошибок компиляции, а так же ряд других побочных эффектов (continue, например) - все это потребует дополнительного документирования макроса, а так же усилий по запоминанию его смысла и т.п. это мелочи - но ровно такие же мелочи, ради которых все это и делалось, имхо. попытка упростить и без того несложное приводит к необходимости что-то делать еще, хотя бы объяснять, как это работает.

именно этот факт я и подчеркиваю, а вовсе не то, что у вас извращенный подход. подход нормальный, но рекомендовать его, как удачный вариант, я бы не стал. всего лишь один из возможных, и даже наоборот, ненужно хитрый, чтобы быть безусловно приемлемым. точно так же, как и возможность писать любые операторы внутри switch-а...
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: goto в С++.

Сообщение avreal »

Мастер Ломастер писал(а):а по поводу, в частности, зеркалок - так ведь это правда! чистая правда! 90% тех, кто покупает фотоаппарат, гонятся за совершенно непонятными им численными характеристиками, а потом делают 100% снимков в режиме полный автомат, многие даже зумом не пользуются! спросите любого владельца навороченной иномарки: не считая режима парковки и заднего хода, сколько раз он переключал режимы коробки-автомата? какие там вообще режимы есть? какими наворотами он пользуется вообще? думаю, ответ прогнозируем и неудивителен... понты, чистые понты... у васи понт зеркалка, у пети - кадиллак, у вас - Си с плюсами и без... :))) это естественно и понятно.
Сведу в табличку то, как я понял этот текст. Сначала в нём упомянут уровень вледения зеркалкой и коробокй передач Васей и Петей, потом рядом упомянут я с С (по С++, кстати, я и не «понтуюсь» особо, это к neiver-у с недостижимым для меня уровнем виртуальных портов). Выходит следующее.

Код: Выделить всё

Пользоваться         Коробокй передач         Языком программирования С
                     или фотоаппаратом
НЕ зная и
НЕ используя          ПОНТЫ                    нормально, так и надо
возможностей

ЗНАЯ возможности
и используя         нормально, так и надо            ПОНТЫ
ПРИ НЕОБХОДИМОСТИ
Явное противоречие, которое разрешается только при принятии критерия «Понты — это всё, что не так, как у Мастера-Ломастера».

Продолжая аналогию с Васей да Петей, «С» является понтами у Вас, ведь это Вы пользуетесь им на уровне «я так понял и мне достаточно» (тут уже дед Щукарь с «энциклопией» просится), без знания «конструкции» и возможностей.
Другие понтуются ассемблером (в смысле толком не знают, но гордятся, что пишут не на С), вроде как сам факт его применения обеспечивает им короткие и быстрые программы. А когда показываешь им, как надо и говоришь, что даже компилятор С может эффективнее, чем они, закодировать данные действия — обижаются.
Я пользуюсь при необходимости и ассемблером, и хитрыми возможностями С.
У меня есть и зеркалка, и «мыльница», в зависимости от ситуации я пользуюсь тем или другим.

Кстати, по поводу зеркалок...
Мастер Ломастер писал(а):а по поводу, в частности, зеркалок
...
а потом делают 100% снимков в режиме полный автомат
Не понял, почему использование режима «автомат» на зеркалке есть признаком вообще чего-либо.
Если Вы думаете, что преимущество зеркалок в в большем количестве режимов, то это ошибка.
Если так не думаете, то зачем тут эта фраза.
У многих зеркалок режимов-то и не больше, чем у маленьких аппаратов. Зеркалка на автомате снимает лучше, чем мыльница на автомате — так почему не пользоваться?
Полный автомат либо «P» на зеркалке я использую, пожалуй, чаще, чем на мыльнице.
«зумлю» что там, что там — иногда объективом, иногда ногами (отойти/подойти).
Автоматические режимы — это как библиотечные подпрограммы в С.
Можно тупо пользоваться, можно тупо не пользоваться, можно знать, когда стоит пользоваться, а когда — нет.
Некоторыми (как инструментальными подпрограммами умножения/деления) пользуются все.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: goto в С++.

Сообщение Мастер Ломастер »

ваш пространный ответ на мой не менее пространный пост, содержит в своей основе логическую ошибку, потому бессмысленен. понятие "понт" возникает не тогда, когда происходит использование или не использование возможностей чего-либо, а когда переход (приобретение) на нечто новое осуществляется без понятия для чего это нужно и нужно ли это вообще, а ради выяснения "тварь ли я дрожащая или право имею?". покупка кадиллака с автоматом 18-ступенчатым взамен лексуса с 12-ступенями при том, что езда осуществляется по городу 2 км на работу и 2 км обратно - чистый понт. еще лучший пример - iPhone: вещь, созданная и культивируемая именно как понтовая вещь, обладание которой не дает никаких преимуществ владельцу, кроме шанса сильнее растопырить пальцы.

можно привести много аналогов с переходм с Си на С++, с С++ на какой-нибудь лисп и т.п. - во многих случаях реальной нужды в этом нет - но без этого перехода невозможно продемонстрировать окружающим свою крутость. как правило, "специалистов" вроде меня окружают начинающие, даже мой уровень владения Си позволяет мне "понтоваться", однако, вас окружают совсем другие "владельцы Си", и потому с рассказами о тонкостях strcmp вы уже никак не смотритесь на их фоне, зато можно поломать голову (себе и окружающим) шаблонами и т.п. - вещами, которыми по-настоящему владеют немногие. это все абсолютно понятно, нормально и естественно - ни стыдиться, ни гордиться нечего, мы все одинаковые. объяснять, что кадиллак позволяет на 1,5 минуты быстрее доехать, или применение 20-страничного шаблонного кода позволяет выиграть 125 тактов в коде - это хоть и факт, но крайне несущественный, имхо...

а доказывать, что, дескать я хоть и на кадиллаке езжу, но я парень свой в доску - это как-то даже хуже выглядит, чем "понтоваться" :)))

другой пример: "знаменитый" Перельман. делает свое дело лучше многих академиков, ни нигде никому об этом не говорит, не демонстрирует свою крутость на форумах, симпозиумах и т.п. считает нужным делать - и делает. вот это по-настоящему беспонтовый подход: то ли ради удовольствия, то ли ради чего-то бОльшего, нам не понятного и неизвестного...
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: goto в С++.

Сообщение avreal »

Мастер Ломастер писал(а):понты, чистые понты... у васи понт зеркалка, у пети - кадиллак, у вас - Си с плюсами и без... :)))
Мастер Ломастер писал(а):понятие "понт" возникает ... а когда переход (приобретение) на нечто новое осуществляется без понятия для чего это нужно и нужно ли это вообще, а ради выяснения "тварь ли я дрожащая или право имею?"
Спасибо.
Буду знать, что всё, что я знаю (и пытаюсь передать другим, даже когда они сопротивляются) — это «без понятия для чего» или «ради выяснения».

Не судите всех по себе.
Не факт, что сидящий в кадиллаке испытывает те чувства, которые Вы себе представляете, когда его видите.
Но 99.9% что Вы будете испытывать именно то, что представляете, когда (если) сядете в кадиллак.

Я же испытываю удовольствие от получения новых знаний и до тех пор, пока другой человек не доказал мне о себе противоположное — считаю, что он от новых знаний испытывает те же чувства и пытаюсь этим удовольствием поделиться.

Уже говорил — мои знания таки довольно малы.
Были бы больше — «ради понта» писал бы (хорошие) книги по языку С.
«Понтовался» бы, создавая компиляторы существующих языков или новые языки.
При этом «демонстрируя свою крутость» гораздо более широкой публике, чем на этом форуме.

Пример с Перельманом по своему хорош.
Про него знают, значит, он где-то публикуется.
И с подходом «вся жизнь — понты» очень легко сказать, что его понт состоит в том, что всяике там симпозиумы он считает настолько ниже своего уровня, что не желает тратить на них время. И «понтуется» он только перед десятком человек в мире, которые действительно могут его понять, а им достаточно статей.

С другой стороны имеем армию учителей.
Среди них есть такие же, как и среди инженеров — «а что там, работа как работа, не хуже и не лучше других, выбрал случайно и делаю как выходит». Они — «нормальные» ?
А есть такие, котрые горят и пытаются зажечь других. Они — «понтуются» ?
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: goto в С++.

Сообщение Мастер Ломастер »

avreal писал(а):А есть такие, котрые горят и пытаются зажечь других. Они — «понтуются» ?
конечно! :) не надо приписывать мне утверждение того, что "понт" - это очень плохо. это обычно, нормально, присуще всем. в той или иной мере :) и Перельману по-своему тоже. даже извлечение новых знаний - это свой особый понт: всегда приятно знать больше, чем кто-то, даже если кроме самого себя об этом никто не знает :) ну а если еще кому-то это продемонстрировать (из самых чистых побуждений) - это вдвойне приятно :)))

любой человек должен чем-то гордиться. плохо лишь тогда, когда кроме понта больше нет ничего...
битва с дураками проиграна, победители торжествуют. слава победителям!
Ayrton
Родился
Сообщения: 1
Зарегистрирован: Вс окт 23, 2011 20:27:07

Re: goto в С++.

Сообщение Ayrton »

Pika4u писал(а):Пишу программы для компьютера. На С++. Раньше ещё немного знал асм для АВР. И меня заинтересовало, есть ли в С++ метки и команды перехода по метке. Оказывается, есть. Эта команда называется goto. Но я прочитал про неё много нелестных отзывов в интернете. Ну не знаю, мне так легче меток понаставить, чем городить кучу циклов. Хотя на компиляцию программы с goto уходит дольше времени-секунд 7. Кто что думает?)

Интернет - это место, где нужно очень сильно "фильтровать базар". Прежде чем читать в инете, нужно прочитать книги Дейкстры, Хоара, Вирта, Кэрнигана и Ритчи (если уж мы про С). Разобраться в структурном и объектном стиле программирования - тогда вопросов про goto не будет...

В частности, у Кэрнигана и Ритчи "Язык программирования С" на стр.180 издания 1985 года, читаем:

"Безусловную передачу управления можно выполнить с помощью оператора goto

goto идентификатор

Идентификатор должен быть некоторой меткой (см. разд. 9.12), помещённой в текущей функции."

"Отцы" языка С и ОС Unix открытым текстом описывают пределы использования оператора goto - в текущей функции терпимо, но не более того! Ни в одном примере или задаче из их классической книги goto не используется. А уж "отец" C++ Страуструп просто убил бы любого, кто в С++ использует goto, за цинничное надругательство над парадигмой объектного программирования...

goto - это самый безотказный метод наложить большую кучу ошибок в программе.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»