-
- Не вижу смысла в инкременте. Чревато. - azur_sky(10.06.2010 17:05)
- Стандартная конструкция поддержки автоматов состояний, хотя конечно явное указание нового состояния предпочтительнее. Т.е. так я уже не пишу, написано лет 6 назад Vladimir Ljaschko(549 знак., 09.06.2010 12:15)
- А почему "я уже не пишу", что, есть другой способ? - Михаил Е.(09.06.2010 12:33)
- Инкремент не использую. Вначале enum всех состояний, а в функции явное присвоение state=stANSWER, даже если это следующий case. Нагляднее. - Vladimir Ljaschko(09.06.2010 12:51)
- Я думаю, не только нагляднее, но BK(50 знак., 09.06.2010 16:09, )
- Не вижу в чем эффективнее. Я с инкрементом одни и те же куски программы в разных местах могу использовать. Михаил Е.(185 знак., 09.06.2010 16:46)
- Хм... BK(180 знак., 09.06.2010 17:15, )
- Самое главное - наглядность! Я тоже так делаю. Всё в enum сую и только обычные присваивания. FDA(78 знак., 09.06.2010 16:49)
- Каким образом тогда заменить инкремент присваиванием? - Михаил Е.(09.06.2010 16:54)
- Примерно так: FDA(492 знак., 09.06.2010 17:04)
- Это понятно. Я про один кусок программы в разных местах... - Михаил Е.(09.06.2010 19:37)
- Дык 1) нет правил без исключений, 2)разные состояния можно передавать в параметрах функций или макросов. - Vladimir Ljaschko(09.06.2010 23:25)
- там про повторы кода есть - koyodza(09.06.2010 20:59, ссылка)
- Так я наоборот от повторов избавляюсь. - Михаил Е.(09.06.2010 22:06)
- state++ потенциально опасен тем, что при добавлении новых состояний переход может происходить не туда, куда нужно koyodza(347 знак., 10.06.2010 11:50)
- И далеко не факт, что потеряете - современные компиляторы достаточно умные, чтобы самостоятельно объединить одинаковые ветки. И функцию заинлайнить тоже смогут, если хотя бы дать им подсказку в виде static. - vmp(10.06.2010 12:01)
- Исключение двойного кода - это скорее средство борьбы не столько против компилятора, сколько против человека. - Vladimir Ljaschko(10.06.2010 17:10)
- Угу. Времена "истории одного байта" уже прошли. Экономить отдельные байты повышая вероятность сделать ошибку (если не сейчас, то при следующей модификации программы) - ну его нафиг. - vmp(10.06.2010 17:25)
- ++1; Последний раз ++state; было где-то между i87C51FA и AT89C55, причём аккуратненько перед break; чтобы компилятор получше ветки слил :-) - ReAl(11.06.2010 11:11 - 11:14)
- Индийский способ программирования. Не париться с оптимизацией. Работает, и ладно. - Dvadima(09.12.2010 13:49)
- ++1; Последний раз ++state; было где-то между i87C51FA и AT89C55, причём аккуратненько перед break; чтобы компилятор получше ветки слил :-) - ReAl(11.06.2010 11:11 - 11:14)
- Угу. Времена "истории одного байта" уже прошли. Экономить отдельные байты повышая вероятность сделать ошибку (если не сейчас, то при следующей модификации программы) - ну его нафиг. - vmp(10.06.2010 17:25)
- Исключение двойного кода - это скорее средство борьбы не столько против компилятора, сколько против человека. - Vladimir Ljaschko(10.06.2010 17:10)
- И далеко не факт, что потеряете - современные компиляторы достаточно умные, чтобы самостоятельно объединить одинаковые ветки. И функцию заинлайнить тоже смогут, если хотя бы дать им подсказку в виде static. - vmp(10.06.2010 12:01)
- state++ потенциально опасен тем, что при добавлении новых состояний переход может происходить не туда, куда нужно koyodza(347 знак., 10.06.2010 11:50)
- Так я наоборот от повторов избавляюсь. - Михаил Е.(09.06.2010 22:06)
- Это понятно. Я про один кусок программы в разных местах... - Михаил Е.(09.06.2010 19:37)
- Примерно так: FDA(492 знак., 09.06.2010 17:04)
- Каким образом тогда заменить инкремент присваиванием? - Михаил Е.(09.06.2010 16:54)
- Не вижу в чем эффективнее. Я с инкрементом одни и те же куски программы в разных местах могу использовать. Михаил Е.(185 знак., 09.06.2010 16:46)
- +100 - koyodza(09.06.2010 12:55)
- Я думаю, не только нагляднее, но BK(50 знак., 09.06.2010 16:09, )
- Инкремент не использую. Вначале enum всех состояний, а в функции явное присвоение state=stANSWER, даже если это следующий case. Нагляднее. - Vladimir Ljaschko(09.06.2010 12:51)
- А почему "я уже не пишу", что, есть другой способ? - Михаил Е.(09.06.2010 12:33)
- При первом вызове сработает case1, а с каждым повторным вызовом state будет увеличиваться на единичку. Вернуть state назад вы уже не сможете, разве что наступит переполнение по char). - Ксения(08.06.2010 22:50)
- с какой радости "с каждым повторным вызовом state будет увеличиваться на единичку"? Не будет - koyodza(09.06.2010 09:46)
- Ксенья, я понял, спасибо. А по "каллиграфии" - попадание в "case 1" будет только одно. Дальше, state==2... :) - Скрипач(08.06.2010 23:30)
- static инициализируется лишь однажды - в момент запуска программы (грузится наравне с инициализированными константами). Работа функции полностью эквивалентна тому, как если бы state был объявлен вне ее. Т.е. в своем теле она единичку state не Ксения(15 знак., 08.06.2010 22:55 - 22:58)
- В том-то и вопрос! Является ли "static char X = 1" инициализацией или присвоением? Соответственно, будет выполнен один раз или при каждом проходе цикла? - Скрипач(08.06.2010 22:53)
- Является инициализацией. На то ему имя static. - Ксения(08.06.2010 23:00)
- только один раз, это любому ежу, знающему слово static должно быть понятно - koyodza(08.06.2010 22:55)
- От! А какова "логическая цепочка" (от стандарта), доказывающая что это неизбежно? - Скрипач(08.06.2010 22:58)
- Здрассьте. Это азы языка Си. Их обычно не по стандартам учат, а по учебникам (Керниган и Ричи, к примеру). А стандарт SciFi(897 знак., 09.06.2010 00:20 - 00:23)
- Респект и уважуха :) Скрипач(254 знак., 09.06.2010 08:33)
- в двух словах Ксения уже ответила. Хотите, чтобы кто-то бесплатно рылся в стандарте для удовлетворения вашего любопытства, выискивая нужную строчку? - koyodza(08.06.2010 23:01)
- Конечно нет. Интерес не коммерческий :) Если кто-то на столько круче меня, что сразу "ткнет пальцем", то будет, с моей стороны, спасибо и искреннее признание его крутости :) Скрипач(145 знак., 08.06.2010 23:13)
- гуглевание на несколько минут даст кучу ответов и информации к размышлению - koyodza(08.06.2010 23:27 - 09.06.2010 09:28, ссылка)
- Ссылка 1."Область видимости" Ссылка 2."JScript". Впрочем, Ксенья уже указала нужную цепочку рассуждений... - Скрипач(08.06.2010 23:45)
- гуглевание на несколько минут даст кучу ответов и информации к размышлению - koyodza(08.06.2010 23:27 - 09.06.2010 09:28, ссылка)
- Конечно нет. Интерес не коммерческий :) Если кто-то на столько круче меня, что сразу "ткнет пальцем", то будет, с моей стороны, спасибо и искреннее признание его крутости :) Скрипач(145 знак., 08.06.2010 23:13)
- Здрассьте. Это азы языка Си. Их обычно не по стандартам учат, а по учебникам (Керниган и Ричи, к примеру). А стандарт SciFi(897 знак., 09.06.2010 00:20 - 00:23)
- От! А какова "логическая цепочка" (от стандарта), доказывающая что это неизбежно? - Скрипач(08.06.2010 22:58)
- тип переменной state не определён, реакция разная. А на месте точечек что? koyodza(302 знак., 08.06.2010 22:51)
- Подставил "char", IMHO, вопрос от типа не зависит. - Скрипач(08.06.2010 22:55)
- вопрос был "как отработает такая конструкция". Нужно было телепатировать, какая именно строка интересует? - koyodza(08.06.2010 22:58)
- Все, что не нужно для демонстрации "сути" было убрано нафик. Скрипач(218 знак., 08.06.2010 23:06)
- "детали многое меняют" - koyodza(09.06.2010 10:31, картинка)
- Все, что не нужно для демонстрации "сути" было убрано нафик. Скрипач(218 знак., 08.06.2010 23:06)
- вопрос был "как отработает такая конструкция". Нужно было телепатировать, какая именно строка интересует? - koyodza(08.06.2010 22:58)
- пля, мухлёж детектед! В первой редакции третья строчка была static state = 1; - koyodza(08.06.2010 22:54)
- Коллега, у нас с Вами начались "гонки сигналов" :) - Скрипач(08.06.2010 22:56)
- Подставил "char", IMHO, вопрос от типа не зависит. - Скрипач(08.06.2010 22:55)