|
плохой ли тон программирования развешивать флаги и их проверять?, Про goto четко сказано- лучше не использовать. Или флаги- это хардкод? |
|
|
|
Jan 25 2011, 14:23
|
Профессионал
    
Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079

|
вот, например, Код ... static uint8_t flag = 0; ... if ( hasinput () ) { data [num] = getchar(); if (flag) { if( data [num] == 0x0A) { data [num - 1] = 0x00; num = 0; flag = 0; } else num++; } if( data [num] == 0x0A) { data [num] = 0; flag = 1; } } Задача стояла такая: модем на запрос АТ команды выдает ответ. Сначала пишет саму команду, потом ответ. В ASCII это выглядит так: 41 54 2B 43 50 42 53 3D 3F 0D 0D 0A 45 52 52 4F 52 0D 0A 00 A T + C P B S = ? CR CR LF E R R O R CR LF Моя задача была сложить в массив data[] все после символа 0x0A, т.е. ERROR итог, код рабочий. Но хороший ли тон так писать- через флаги.
Сообщение отредактировал Метценгерштейн - Jan 25 2011, 14:25
|
|
|
|
|
Jan 25 2011, 15:13
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(_Pasha @ Jan 25 2011, 17:48)  Кстати, про goto - это был пиар блочного кодирования, совсем не обязательно его игнорировать и кривиться, что мол читабельность программы снижается итд итп - это ведь все ложь. Скажем так - можно, но осторожно. Чтобы лапши не накрутить. Альтернатива флагам и поллингу - запуск callback-функций непосредственно в обработчике прерываний. Что лучше, что хуже - это уже каждый решает индивидуально и в зависимости от.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jan 25 2011, 18:12
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Метценгерштейн @ Jan 25 2011, 21:55)  хорошо, был ли вариант переписать данную задачу без флагов и тому подобное. Только с if или тому подобным? Сами как решили бы подобную задачу? Тоже с флагами? Я бы заполнил сначала весь буфер, а потом бы воспользовался функцией strchr.
|
|
|
|
|
Jan 25 2011, 18:19
|
Профессионал
    
Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079

|
Bill, как же ни при чем? Классический конечный автомат Код switch(State) { case Statement1: // этот код выполняется если Statement1 ....... break; case Statement2: // этот код выполняется если Statement2 ....... break; }
|
|
|
|
|
Jan 25 2011, 18:23
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Метценгерштейн @ Jan 25 2011, 22:19)  Bill, как же ни при чем? Классический конечный автомат Код switch(State) { case Statement1: // этот код выполняется если Statement1 ....... break; case Statement2: // этот код выполняется если Statement2 ....... break; } Я же не конечный автомат имел в виду.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|