Easyelectronics.ru

Электроника для всех
Текущее время: 22 окт 2018, 17:17

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 141 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 13:13 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2870
Откуда: КЧР, поселок Нижний Архыз
Даю пример. Все очень просто:
Код:
#include <stdio.h>
#include <stdint.h>

#define FUNC(arg) _Generic(arg, uint16_t: funcu, int32_t: funci)(arg)

void funcu(uint16_t arg){
    printf("uint16_t: %u\n", arg);
}

void funci(int32_t arg){
    printf("int32_t: %d\n", arg);
}

int main(){
    uint16_t u = 32;
    int32_t i = -50333;
    FUNC(u);
    FUNC(i);
    return 0;
}

Компилируем и получаем:
Код:
gcc main.c && ./a.out
uint16_t: 32
int32_t: -50333


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 13:30 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2416
Eddy_Em писал(а):
Даю пример. Все очень просто:

Какое убожество...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 13:34 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2870
Откуда: КЧР, поселок Нижний Архыз
Это не убожество, а очень классное решение для перегрузки функций.
И не требуется пользоваться уродством вроде крестов!!!

Хотя, хрюникодофилу этого не понять…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 13:45 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2416
Eddy_Em писал(а):
Это не убожество, а очень классное решение для перегрузки функций.

Это жалкое подобие левой руки, требующее лишних телодвижений и решающее только очень узкий круг задач. Попробуйте сделать тоже самое для 3-4 параметров, каждый из которых может быть разного типа и это "очень классное решение" сразу же превратится в нечитаемую кашу из макросов. Не говоря уже о том, что функции для всех этих комбинаций вам прийдется написать руками и всем дать разные (при этом понятные) имена. Это все равно что радоваться тому, что вам дали лопату вместо детского совочка, хотя вам нужно выкопать котлован и под него экскаватор в самый раз. Спору нет, лопата куда лучше, но нужен-то экскаватор...
Eddy_Em писал(а):
И не требуется пользоваться уродством вроде крестов!!!

Пользоваться уродством в виде _Generic ваша религия вам не запрещает, а вот пользоваться плюсами, где это есть отродясь и в удобной форме - запрещает.
Eddy_Em писал(а):
Хотя, хрюникодофилу этого не понять…

Та да, вам действительно не понять, что можно писать удобно и читаемо, а не так как предлагаете вы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 13:54 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1314
Откуда: Китай, Пекин
Цитата:
Макросы помогут в зависимости от типа вызывать нужную функцию.

причём тут это ?

я говорил о ПЕРЕГРУЗКЕ функций это подразумевает диспетчеризацию по типу и количеству аргументов

например:
Код:
    void disp(char c);
    void disp(char c, int num) ;
    void disp(char c, int num, long resp) ;


на С это выглядит Убожественно

Код:
    void disp(char c);
    void disp1(char c, int num) ;
    void disp2(char c, int num, long resp) ;


лепим горбатые имена, никакие макросы с этим не помогут


Последний раз редактировалось cheblin 07 июн 2018, 14:04, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:00 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2416
cheblin писал(а):
на С это выглядит Убожественно

Я бы сказал, что на С это (перегрузка) вообще никак не выглядит, поскольку отсутствует как явление. Корявая затычка на макросах и _Generic это не "выглядит" , а "как делать нельзя".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:11 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1314
Откуда: Китай, Пекин
на плюсах тоже свои тараканы...

есть у меня на сях структура
Код:
typedef struct _Pack
{
   Meta* meta;// метаданные о пакете
   uint8_t       data[]; //массив с данными пакета
}  Pack;

захотел я её переписать на ++

Код:
class Pack
{
   Meta* meta;
   uint8_t       data[];
}         

а теперь попробуем воспользоваться всей мощью плюсов, мы ж ради чего вариант на С++ колбасим...

пытаемся расширить свой Pack и навернуть методов.... а вот хрен! делай data указателем - тогда ОК.
ну это какой то позор! у меня каждый бит пакета на счету, а они предлагают мне указатель в пакет запихать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:18 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3298
Если в любом ЯП вам начинает требоваться нечто типа "замена левой руки", то вы сделали ошибку на этапе проектирования архитектуры и/или неверно выбрали ЯП.

В том же С если вам нужны функции с одинаковым именем, но разным наборов параметров стоит задуматься, а зачем оно вам понадобилось и не будет ли практичнее и/или читабельнее обойтись без таких одноименных функций.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:27 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1314
Откуда: Китай, Пекин
fr0ster писал(а):
Если в любом ЯП вам начинает требоваться нечто типа "замена левой руки", то вы сделали ошибку на этапе проектирования архитектуры и/или неверно выбрали ЯП.

у меня нет выбора. BlackBox - генерирует код обработки протокола который работает даже на 8 битных микроконтроллерах.
поищите с чего началась дискуссия: с вопроса "а чего не хватает в С-ях" ... я и ответил своим списком хотелок.

fr0ster писал(а):
В том же С если вам нужны функции с одинаковым именем, но разным наборов параметров стоит задуматься, а зачем оно вам понадобилось и не будет ли практичнее и/или читабельнее обойтись без таких одноименных функций.

Function overloading это настолько фундаментально и очевидно, даже нет желания тратить время на убеждение необходимости в этом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:38 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2416
cheblin писал(а):
на плюсах тоже свои тараканы...

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

А в чем позор-то? Вы пытаетесь создать класс переменной длины. Как для него должен работать, например, new?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:51 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1314
Откуда: Китай, Пекин
evsi писал(а):
Как для него должен работать, например, new?

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


Последний раз редактировалось cheblin 07 июн 2018, 14:56, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:55 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2870
Откуда: КЧР, поселок Нижний Архыз
cheblin писал(а):

На том же SO полным-полно решений этой проблемы. А вообще, C позволяет заводить функции с переменным количеством аргументов, почему бы вместо того, чтобы лепить такие функции с разным количеством, не сделать одну с переменным?
Но чаще всего если грамотно спроектировать, никаких проблем не будет: ни с перегрузкой, ни с разным количеством аргументов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 14:58 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3298
cheblin писал(а):
Function overloading это настолько фундаментально и очевидно, даже нет желания тратить время на убеждение необходимости в этом.


Во первых в это не настолько фундаментально и очевидно, так что спорить не стоит.
Во вторых, если без этого можно обойтись, это уже не необходимо, и это как раз очевидно.
В третьих всегда можно использовать некое подмножество С++, как это в линуксовом ядре делается.
Тогда у вас будет и перегрузка функций, и параметры по умолчанию, но без нежелательного конкретно вам оверхеда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:01 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1314
Откуда: Китай, Пекин
Eddy_Em писал(а):
почему бы вместо того, чтобы лепить такие функции с разным количеством, не сделать одну с переменным?
Но чаще всего если грамотно спроектировать, никаких проблем не будет: ни с перегрузкой, ни с разным количеством аргументов.

напомнило анекдот.

Цитата:
Решили провести такой тест. В темной комнате поставили табуретку, вбили гвоздь, чтобы торчал острой частью вверх, и по очереди посадили на эту табуретку русского, украинца и белоруса.
Русский сел на гвоздь, вскочил и давай матом ругаться.
Украинец сел на гвоздь, вскочил, нащупал гвоздь, вытащил его и положил в карман: "В хозяйстве пригодится".
Белорус сел на гвоздь, подскочил...постоял, подумал и со словами "А можа, так и трэба?" снова сел.

так вот, я утверждаю - гвозди из табурета торчать не должны


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:09 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3298
Eddy_Em писал(а):
А вообще, C позволяет заводить функции с переменным количеством аргументов, почему бы вместо того, чтобы лепить такие функции с разным количеством, не сделать одну с переменным?


Чаще всего такое решение небезопасно и неоптимизируемо компилятором.
Когда количество параметров заранее известно, параметры можно через регистры передать в ряде случаев.
С переменным числом параметров не прокатит. Плюс так или иначе нужно анализировать число параметром, проверять тип и тд.
Короче оверхед налицо, уж лучше С++ тогда взять.

Eddy_Em писал(а):
Но чаще всего если грамотно спроектировать, никаких проблем не будет: ни с перегрузкой, ни с разным количеством аргументов.


Тут однозначно согласен :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:12 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3298
cheblin писал(а):
так вот, я утверждаю - гвозди из табурета торчать не должны


Анекдот не в тему, хотя за комплимент спасибо.

Тут скорее не табуретка, а шило, и не проблема шила, если ты на него сел, а не им дырку сделал.
По сути предмет использован правильно, дырка сделана.
Но что в попе, а не в бумаге, это не к шилу вопрос.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:17 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2416
Eddy_Em писал(а):
На том же SO полным-полно решений этой проблемы. А вообще, C позволяет заводить функции с переменным количеством аргументов, почему бы вместо того, чтобы лепить такие функции с разным количеством, не сделать одну с переменным?

Шикарный способ огрести пачку проблем.
Eddy_Em писал(а):
Но чаще всего если грамотно спроектировать, никаких проблем не будет: ни с перегрузкой, ни с разным количеством аргументов.

Ну да, ну да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:17 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1314
Откуда: Китай, Пекин
я ж писала выше, мои пожелания к С не ломают самого языка. все компиляторы работают как обычно.
все вполне реализуемо в пределах IDE.
совсем немного "сахарку" и программировать станет намного приятнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:20 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1314
Откуда: Китай, Пекин
Цитата:
не сделать одну с переменным

даю справку. они ВСЕ должны быть одного типа. если пользоваться стандартным va_arg
это не соответствует действительности. а все почему, потому что все примеры по использованию va_arg выглядят так
Код:

double add( int n, ... )
{
   int i = 0;
   double sum = 0.0;
   va_list argptr;
   va_start( argptr, n ); // Initialize argptr; that is,
       for ( i = 0; i < n; ++i ) // for each optional argument,
          sum += va_arg( argptr, double ); // read an argument with type
   // double and accumulate in sum.
   va_end( argptr );
   return sum;
}


а оказывается можно делать и вот так

Код:

double add( int n, ... )
{
   int i = 0;
   double sum = 0.0;
   va_list argptr;
   ....
    sum += va_arg( argptr, double ); // read an argument with type double
    sum += va_arg( argptr, int); // read an argument with type int
    sum += va_arg( argptr, byte); // read an argument with type byte
   ....
   va_end( argptr );
   return sum;
}


вот!


Последний раз редактировалось cheblin 07 июн 2018, 16:38, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:21 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2416
fr0ster писал(а):
Во вторых, если без этого можно обойтись, это уже не необходимо, и это как раз очевидно.

Обойтись много без чего можно. Можно самому огород сажать, поле пахать, коров доить, например. И обойтись без магазинов.
fr0ster писал(а):
В третьих всегда можно использовать некое подмножество С++, как это в линуксовом ядре делается.
Тогда у вас будет и перегрузка функций, и параметры по умолчанию, но без нежелательного конкретно вам оверхеда.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:28 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1314
Откуда: Китай, Пекин
evsi писал(а):
Это куда более рациональный подход, чем религиозная ненависть к плюсам.

нет никакой ненависти, лично я антагонист. знай плюсы и минусы того, что есть и используй с умом.

И чем больше знаешь, тем чаще при программировании, всплывают мысли, а как бы это можно было написать на X ,...или ой, как не хватает в этом месте Y который есть в X и было бы красиво...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:32 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2416
cheblin писал(а):
нет никакой ненависти, лично я антагонист. знай плюсы и минусы того, что есть и используй с умом.

Это был камень не в ваш огород.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:42 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2870
Откуда: КЧР, поселок Нижний Архыз
cheblin писал(а):
Цитата:
не сделать одну с переменным

даю справку. они ВСЕ должны быть одного типа. если пользоваться стандартным va_arg

Пример с printf совершенно опровергает ваши слова.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:48 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1314
Откуда: Китай, Пекин
Eddy_Em писал(а):
cheblin писал(а):
Цитата:
не сделать одну с переменным

даю справку. они ВСЕ должны быть одного типа. если пользоваться стандартным va_arg

Пример с printf совершенно опровергает ваши слова.

мы ведь обсуждаем это?
Цитата:
почему бы вместо того, чтобы лепить такие функции с разным количеством, не сделать одну с переменным

Пример с printf ? я что то опять не догоняю.... поясните.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Книга "Beginning STM32"
СообщениеДобавлено: 07 июн 2018, 15:52 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3298
В printf можно передать переменное число разнотипных параметров.
Реализовано все именно на va_arg.
Но с точки зрения безопасности это просто праздник какой то :)


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

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


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

Сейчас этот форум просматривают: alex_k


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

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

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