Easyelectronics.ru

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

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



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

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

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

Показываю:
Код:
printf("arg %d = %g\n", d, g);

В printf чтобы узнать тип аргумента используется char* fmt, но никто не заставляет вас делать так же. Указываете первым аргументом количество остальных, а дальше все просто, т.к. тип очередного аргумента известен.
Но это извращение какое-то — делать функции с разным количеством аргументов.

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

fr0ster писал(а):
Но с точки зрения безопасности это просто праздник какой то :)

Поэтому я и предлагаю делать количество аргументов фиксированным, как это принято в стандартной практике, а ненужное или дефолтное заменять на NULL.


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

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1056
Откуда: Китай, Пекин
fr0ster писал(а):
В printf можно передать переменное число разнотипных параметров.
Реализовано все именно на va_arg.
Но с точки зрения безопасности это просто праздник какой то :)

о! точно. там же при каждом вызове в va_arg можно разные типы подсовывать! во, узнал полезное! спасибо!
Цитата:
Везде в С именно так и делают, посмотрите на большинство функций libc с кучей аргументов!!!

вот это и есть убожество. понять в какие комбинации переменных допустимы без документации невозможно.


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

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

Нормальные люди пишут самодокументированный код! А ССЗБ либо не пишут комментариев вообще, либо пишут их где попало.


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

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

Нормальные люди пишут самодокументированный код! А ССЗБ либо не пишут комментариев вообще, либо пишут их где попало.

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

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


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

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

Какой неописуемо удобный в работе вариант :-/


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1681
Eddy_Em писал(а):
Нормальные люди пишут самодокументированный код! А ССЗБ либо не пишут комментариев вообще, либо пишут их где попало.

Самодокументированный код по определению не содержит никаких комментариев. И да, это правильный подход, правда не во всех случаях.


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

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

а вот с возвращением массива, ничего информационного нет.
ну и ? фигня же.


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

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

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3132
cheblin писал(а):
но оверлорд функций - это и есть тот самый инструмент который позволяет сделать код самодокументированным.


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

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

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


В большинстве случаев это таки следствие косяка при проектировании.


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

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3132
cheblin писал(а):
а вот с возвращением массива, ничего информационного нет.
ну и ? фигня же.


А в С++ как?


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

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1056
Откуда: Китай, Пекин
fr0ster писал(а):
cheblin писал(а):
а вот с возвращением массива, ничего информационного нет.
ну и ? фигня же.


А в С++ как?

в JAVA например так
Код:
public static int[] numbers(){
        int[] A = {1,2,3};
        return A;
    }

только Вы про JAVA почему то не спрашиваете, а всё про С++ ... интересно почему?


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1681
fr0ster писал(а):
В большинстве случаев это таки следствие косяка при проектировании.

Или неудобство использования штатных средств. Функции с большим количеством параметров это сигнал о том, что передавать их нужно в виде структуры. Если делать это средствами С, то получается очередной SPL/HAL.


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1681
fr0ster писал(а):
А в С++ как?


Например так:
Код:
struct TestContainer {
    int x;
    int y;
};

using TestBundle = TestContainer[2];

TestBundle&& myfunction(int x, int y) {
    TestBundle bundle {{x, y}, {x, y}};

    return std::move(bundle);
}


Правда, пользы от этого не очень много, массивы при попытке использовать компилятор ругается на то, что массывы не присваиваются. Тем не менее, в С++, например char*, char[1], char[3] - три разных типа (хотя в некоторых случаях делается type decay и эти три типа могут оказаться совместимы). В С это не так.


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

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3132
evsi писал(а):
fr0ster писал(а):
А в С++ как?


Например так:


Я так понял имелось в виду такое
Код:
int[] numbers()
, что cheblin и подтвердил.


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

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3132
cheblin писал(а):
только Вы про JAVA почему то не спрашиваете, а всё про С++ ... интересно почему?


До сих пор в основном примеры были из С с/без плюсов/крестов.
А так то и обджектив си и свифт и руби и питон можно вспоминать, и шкалу, почему нет то, если джаву вспомнили?


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1681
fr0ster писал(а):
Я так понял имелось в виду такое
Код:
int[] numbers()
, что cheblin и подтвердил.

Собственно, это тоже самое. Просто на тип возвращаемого значения вида "int[3]" ругается компилятор. Через using это дело обходится.


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

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3132
Тогда уж проще возвращать указатель в С.
Сомневаюсь что такие пляски с бубном в С++ стоят выделки.
А Джаву не везде будешь использовать.
Джава на СТМ32... это почти наброс на вентилятор :)


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

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

Возвращать указатель привычнее, но не проще. На плюсах можно сделать куда удобнее (к тому же эффективнее) - возвращать rvalue ссылки и дать компилятору возможность со всем этим хозяйством разбираться. А "снаружи" пользоваться так, как будто это обычные переменные. Причем за счет return value optimization и copy elision все это будет весьма эффективно передаваться в-из вызываемых функций. С на такое не способен в принципе.
fr0ster писал(а):
А Джаву не везде будешь использовать.
Джава на СТМ32... это почти наброс на вентилятор :)

Она, кстати, существует. Правда, я не слышал, что бы она пользовалась большой популярностью.


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

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1056
Откуда: Китай, Пекин
а что плохого если б в С бы в дефиниции возвращаемого аргумента функции были бы такие же НИЧЕГО не значащие скобочки [] массива как и в передаваемом аргументе сейчас? (аля JAVA). в чем трагедия?
Цитата:
Джава на СТМ32... это почти наброс на вентилятор :)

почему? вполне реализуемо

правда усилий это потребует достаточно много. да и при наличии RUST-а не очень то и нужно.


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

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2456
Откуда: КЧР, поселок Нижний Архыз
fr0ster писал(а):
Джава на СТМ32... это почти наброс на вентилятор :)

Я сейчас с STM32F0 бьюсь, там тупо добавление double увеличивает размер прошивки на 8кБ!!!
А без double, на fixed point, приходится 64-битные целые вводить, что увеличивает код почти на те же 8кБ...

Что же будет в случае жабки?


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

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1056
Откуда: Китай, Пекин
Цитата:
Что же будет в случае жабки?

будет тоже самое...или даже лучше

по моей ссылке проект трансляции (кодогенерации) JAVA кода в С.
выходной С шный код будет насколько хорош, насколько будет хорошо будет написан транслятор.
написав на JAVA
Код:
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Prints the string to the console.
    }
}

получаем
Код:
#include <stdio.h>

int main(void)
{
    printf("Hello World!\n");
}

и никаких компромиссов!
Сейчас много высокоуровневых языков транслируются в JavaScript, для того чтобы в вебе пыщь-пыщь

BlackBox похожим образом, по спецификации, которая по сути представляет собой обычный JAVA код описывающий протокол, генерирует исходники на С, C# и JAVA.
кодогенерация очень интересная тема, по которой к сожалению крайне мало информации.


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1681
Eddy_Em писал(а):
Что же будет в случае жабки?

У жабы толстый рантайм, но бинарник весьма компактен и растет достаточно медленно. Это при том, что в бинарнике есть куча сугубо текстовой информации (типа названий полей/методов/пакета).


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

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1056
Откуда: Китай, Пекин
Изображение


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 1681
cheblin писал(а):
кодогенерация очень интересная тема, по которой к сожалению крайне мало информации.

Информации много, просто она, в основном, относится к 70хх годам, когда была написана основная масса книжек на эту тему. И привычно найти в сети нужную книжку часто просто не получается. Скажем, есть такая "Грис Д. Конструирование компиляторов для цифровых вычислительных машин". Там разобраны все этапы, включая кодогенерацию.


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

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1056
Откуда: Китай, Пекин
не, я про другое. генерация не бинарного исполняемого кода, а исходного кода другого языка.
сначала кажется, ну это как с обычным текстом работать, потом понимаешь, что, а! нифига - это ж как XML ...
и позже до тебя доходит,.... что ты попал.
что то похожее на инструментарий теоретически есть... но на практике, ммммдя.


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

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2456
Откуда: КЧР, поселок Нижний Архыз
Генерировать код на каком-то ЯП — самый большой бред, который только можно придумать! Потому что результат все равно будет нечитаемым, как тот же XML…
Вон, любители калокуба сильно могут поковыряться в той жести, что им этот самый калокуб нагенерирует?


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

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


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

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


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

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

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