Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2019, 05:56

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 04 сен 2014, 21:42 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
elisey писал(а):
Код:
bool deviceisReady()
{
    return ( flagIsSet(Status, FLAG_READY ) )
}


А, понял. Кстати, м-м-м, распинаться не буду, короче, благодарю. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 05 сен 2014, 14:45 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
demiurg1978 писал(а):
Спрашиваю еще раз, разве криминально и не читабельно пишется таким образом

ага, спрашивать можно до тех пор, пока не получишь "правильный" ответ:))
demiurg1978 писал(а):
Если кому и непонятно, то новичку какому-нибудь. Который только-только начал си изучать.

не в этом дело. неновичок может легко, скажем, разобрать (распарсить) любую муть, которую кто-то выдумает, но на это уйдет время. люди не хотят тратить время на это. обычно, пока ты сам что-то пишешь и всё помнишь, тебе понятно всё в твоем коде, но человек, который не знает ни контекста, ни алгоритма - ему будут далеко не сразу понятны очевидные вещи, на их понимание потратится время. так же можно сказать: мне лень придумывать названия переменным, я просто назову их a b c и d, программа работать иначе не станет. только вот разбирать такой код - удовольствия мало.

кстати, а кто-нить юзает статические анализаторы кода?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 05 сен 2014, 15:44 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Ink писал(а):
ага, спрашивать можно до тех пор, пока не получишь "правильный" ответ:))

Нет, ожидалось, что народ мнения выскажет. Мне давали примеры коллеги, один, например, делает медицинское оборудование. И я не видел у них записей if (val == 0). if (val). Кратко, понятно. И глаз не цепляется, это уже сила привычки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 05 сен 2014, 17:20 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
demiurg1978, мы о разных вещах говорим. написать можно очень много и хоть сразу в маш. коде, и оно БУДЕТ работать где-нибудь в ответственном месте. важно-то не это, и народ не об этом говорит (что, мол, работает же).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 05 сен 2014, 23:50 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3302
Для изучавшего первым языком Pascal if (val == 0) естественно, if (val ) цепляет глаз.
Для изучавшего первым C, все наоборот...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 06 сен 2014, 08:36 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
fr0ster писал(а):
Для изучавшего первым языком Pascal if (val == 0) естественно, if (val ) цепляет глаз.
Для изучавшего первым C, все наоборот...

Какой интересный момент! Интересно, вот те кто возмущались насчет отсутствия ==, другие языки изучали? А я говорил, что сила привычки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 06 сен 2014, 09:50 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2012, 00:31
Сообщения: 1797
Откуда: Новокузнецк
demiurg1978 писал(а):
Какой интересный момент! Интересно, вот те кто возмущались насчет отсутствия ==, другие языки изучали? А я говорил, что сила привычки.

Ну в школе начинал с Паскаля. Потом Делфи. Потом асм, си, си++, питон, чуть-чуть PHP.
Наличие "==" (или "=" в паскале) в сравнении коррелирует с натуральной, естественной записью, в то время как проверка на "не ноль" в стиле си не естественна. То есть if (val ) это не альтернатива, это исключение, которое набрало популярность вследствие популярности языка и отсутствия культуры кодирования. ИМХО.
Но пишите как хотите, ибо тема холиварна, спорить бессмысленно.

_________________
elisey.su


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 06 сен 2014, 10:18 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 849
Важность вопроса часто недооценивается.

Что бы программа хорошо читалась, ее следует приблизить к естественному языку.
Например
Код:
inline bool deviceIsReady()
{return (!(value & (1<<FLAG)));}

...
...
...
if (deviceIsReady()) startDoingGoodThing();

Если девайс готов, приступай к выполнению клёвых вещей. То есть, это фактически естественный язык.
От человека, который в дальнейшем будет читать код (скорее всего, это вы же) не потребуется вникать в реализацию функции deviceIsReady(). Он посмотрит туда лишь по необходимости.

Но:
Код:
if (write(c)) startDoingGoodThing();

И
Код:
if (write(c) == true) startDoingGoodThing();

Тут, возможно, предпочтительнее второй вариант. "если ЗАПИСЬ делай" и "если ЗАПИСЬ вернула УСПЕХ делай"... Второй вариант возможно попроще к осознанию.

Другое дело если мы пишем какой-то математический алгоритм,
Тут уже требования другие, потому что читая алгоритм, человек более внимателен и хочет осознать его весь целиком.
Поэтому раскидывать в десяти функциях алгоритм по программе и присваивать длинные мнемоники - не есть правильно.

Простота и лаконичность.
Код:
void strmagic(char* dest, char* src, int len)
{
int half;
int i;

half= len<<1;
for (i=0;i<len;i++) *(dest+i)=*(src+len-1-i);
*(src+half)='M';
};



Но гораздо важнее выдерживать одинаковый стиль. Кода программа пишется годами... Бывает сложно.


Последний раз редактировалось Mirmik 06 сен 2014, 10:38, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 06 сен 2014, 10:27 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 849
Кроме того существуют вполне устоявшиеся конструкции...

Например,
Код:
if (!strcmp(str,"Mirmik"));

Пишется так же бездумно как и
Код:
for(i=0; i< 3; i++) ...

Тоесть просто один раз запомненная конструкция... Если я буду пробовать соотнести то, как она работает, я потрачу много времени. Я просто знаю, что если так написать, будет работать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 06 сен 2014, 10:51 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Elisey, как там у тебя полностью написана DeviceIsReady? Прототип, функция, определения?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 06 сен 2014, 22:16 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
demiurg1978 писал(а):
Какой интересный момент! Интересно, вот те кто возмущались насчет отсутствия ==, другие языки изучали?

конечно! еще === бывает. иногда просто == может не хватить...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 06 сен 2014, 22:38 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3287
Ink писал(а):
demiurg1978 писал(а):
Какой интересный момент! Интересно, вот те кто возмущались насчет отсутствия ==, другие языки изучали?

конечно! еще === бывает. иногда просто == может не хватить...

или Lua например, где любое число в том числе и 0 это true, при этом (5 == true) и (5 == false) всегда false, потому что число это число, а bool это bool :).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 06 сен 2014, 23:51 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3302
Вот чем больше языков изучишь, тем больше соломки раскидаешь в местах, где у разных языков дефолтное поведение отличается.

ЗЫ Интересно еще посмотреть на географическое распределение Сишников против Паскалистов :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 07 сен 2014, 01:57 
Старожил

Зарегистрирован: 31 янв 2010, 20:19
Сообщения: 4946
Откуда: Донецк-Мариуполь
Mirmik писал(а):
Что бы программа хорошо читалась, ее следует приблизить к естественному языку.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 07 сен 2014, 02:51 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
fr0ster писал(а):
Вот чем больше языков изучишь, тем больше соломки раскидаешь в местах, где у разных языков дефолтное поведение отличается.
подобное кстати справедливо и в пределах одного языка, того же си.
fr0ster писал(а):
ЗЫ Интересно еще посмотреть на географическое распределение Сишников против Паскалистов :)
лучше плотность...
kitekat писал(а):
Например, очень легко ошибиться в тких конструкциях
некоторые люди думали иначе, из современных, например, 1с...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 22 сен 2014, 09:25 
Старожил

Зарегистрирован: 06 фев 2011, 15:16
Сообщения: 617
Откуда: Челябинск
demiurg1978 писал(а):
Разве так писать криминал?:
if (value)
if (!(value))
Я такие примеры видел у людей, которые профессионально занимаются программированием и разработкой электронных устройств.

Криминала никакого здесь нет. Лично я пишу по-разному. Например, проверку некоторой переменной на нуль лучше написать так
Код:
if (var == 0)

Если же трбуется проверка некоторого логического условия, например разряда в переменной, то я стараюсь писать так
Код:
if (!(var & FLAG))
Вообще, у каждого свой стиль написания программ и со временем он может меняться в засимости от приобретенного опыта. Или нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 22 сен 2014, 09:28 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Bill писал(а):
...

Ну и я про то же. Здравствуйте, кстати "или нет" :) Вы один из тех, кто так и показывал проверку разрядов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 22 сен 2014, 10:34 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2619
Откуда: Санкт-Петербург
Mirmik писал(а):
Важность вопроса часто недооценивается.

Что бы программа хорошо читалась, ее следует приблизить к естественному языку.


Что характерно, индустрия программирования от этого давно ушла. Естественные языки _очень_ сложны, неоднозначны и контекстно-зависимы. Даже для общения между людьми пытались придумать более внятные языки (читать про Логлан). Для программирования - тем паче. Берётся что-то ближе к математике.

Если интересно, живой язык, близкий к естественному - AppleScript. Желания на нём писать не вызывает от слова "совсем", предпочитаю обходиться sh-скриптами.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 29 сен 2014, 16:04 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2012, 00:31
Сообщения: 1797
Откуда: Новокузнецк
Кстати к вопросу, что профи распарсит любую сложную строку, и не обязательно писать просто, давайте парсить это
Код:
if(len <= sizeof(packet.data) && !(!!pData ^ !!len)) {
    ....
}

У кого сколько времени ушло?

_________________
elisey.su


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 29 сен 2014, 16:19 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2619
Откуда: Санкт-Петербург
elisey, ну, может, минута, может, меньше - в силу того, что трюк с "!!" сразу вижу.
Вот вы её запишите "проще" - тогда обсудим. Если не писать в несколько if-ов - станет только сложнее.
Хотя нет, можно и действительно упростить:
1. !!x ^ !!y меняется на !x ^ !y или на !x != !y
2. !(!x != !y) заменяется на (!x == !y)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 29 сен 2014, 16:27 
Старожил

Зарегистрирован: 22 июн 2010, 21:53
Сообщения: 1037
Откуда: Brussels
pData указатель небось?

Код:
если _то_что_длиной len помещается в packet.data
   и
     pData определен при len>0
      или
     pData неопределен при len=0

то фигачить



как то так?

по-любому это ппц


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: функция со структурой в качестве параметра
СообщениеДобавлено: 29 сен 2014, 19:48 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2012, 00:31
Сообщения: 1797
Откуда: Новокузнецк
2//Mt, ага, вроде правильно. По поводу типов данных надо было мне сразу сказать: const void* pData, const uint8_t len.
Автор кстати позаботился о читателях и приложил таблицу-комментарий для этого.
Код:
/* Reject NULL data or size larger than payload's data
* Data  Len  Accept ?
* NULL  0      yes Ping packet, accept it.
* NULL  #      no  Data is NULL when len defined, reject it.
*  d    0      no  Data is not NULL but len is NULL, reject it.
*  d    #      yes
*/


2aamonster, а кстати да. Сначала думал что можно как-то так, в лоб
Код:
if (sizeof(packet.data) >= len)   {
   if ( ( (pData == NULL) && (len == 0) ) ||
       ( (pData != NULL) && (len != 0) ) ) {
      do something();
   }
}

А если по вашему, и добавить промежуточных переменных, то как-то так:
Код:
if (sizeof(packet.data) >= len)   {
   bool lengthIsZero = (len == 0);
   bool pointerIsNull = (pData == NULL);
   if (lengthIsZero == pointerIsNull)   {
      doSomething();
   }
}

_________________
elisey.su


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB