Давеча лицезрел как рефлектор сам с собой дискутировал.
Вопросы по С/С++ (СИ)
Re: Вопросы по С/С++ (СИ)
Это что форум чудит? Цитаты другим присваивает.
Давеча лицезрел как рефлектор сам с собой дискутировал.
Давеча лицезрел как рефлектор сам с собой дискутировал.
- Реклама
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Вопросы по С/С++ (СИ)
кроме того что я должен понять кгда '1' перестала быть равна 0x31, на эти преобразования тратятся и ресурсы мк... или нет?
____
он рефлексировал...
____
он рефлексировал...
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
ну, во-первых, cout вы вряд ли в МК будете использовать... а во-вторых, все константы обрабатываются еще на этапе компиляции, так что лишних преобразований МК делать не будет.Ivanoff-iv писал(а):на эти преобразования тратятся и ресурсы мк... или нет?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Он - может и не будет. Но абдуринщиков, которые printf в микроконтроллер пихают — пруд пруди! Они еще флоаты любят на всяких тиньках... Жестокие!..ARV писал(а):cout вы вряд ли в МК будете использовать
Вот такие чуды-юды могут и cout запихнуть в МК! Им-то пофиг, что мигалка светодиодом 128кБ флеша сжирает!
Добавлено after 1 minute 37 seconds:
[uquote="dosikus",url="/forum/viewtopic.php?p=3708045#p3708045"]Это что форум чудит? Цитаты другим присваивает.
Давеча лицезрел как рефлектор сам с собой дискутировал.
Здесь идиотизм с интерфейсом: если ты однократно отвечаешь, нажимая кнопочку "цитата", то кнопочка расположена под сообщением. Но если отвечаешь мультицитированием, то кнопочка над сообщением!
Кто такой маразм придумал — не знаю, но я первые несколько сообщений тоже постоянно не туда жамкал! А в итоге выделенный текст копируется, но автор подставляется не тот...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
скажу больше: я тут многих никак не могу убедить, что printf - удобно, и его не только можно, но и нужно применять в проектахEddy_Em писал(а):Но абдуринщиков, которые printf в микроконтроллер пихают — пруд пруди!
лично я в своих проектах с USART почти всегда использую printf, хотя и для ЖКИ и даже 7-сегментных индикаторов тоже применял
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
printf из stdlib — это же жесточайший оверхед!
Да и на кой черт он нужен, если вывести число в десятичной или 16-ричной системе легко и просто без printf? А флоаты на микроконтроллерах обычно не нужны. Если даже и нужны, то несложно свою функцию вывода накалякать. И флеш в итоге сэкономить можно, и производительность увеличить по сравнению с жирным и тормозным printf'ом.
Да и на кой черт он нужен, если вывести число в десятичной или 16-ричной системе легко и просто без printf? А флоаты на микроконтроллерах обычно не нужны. Если даже и нужны, то несложно свою функцию вывода накалякать. И флеш в итоге сэкономить можно, и производительность увеличить по сравнению с жирным и тормозным printf'ом.
Re: Вопросы по С/С++ (СИ)
[uquote="ARV",url="/forum/viewtopic.php?p=3708044#p3708044"]объяснения, с какого перепугу '1' и 1 оператор << "стандартно" считает одним и тем же, я так и не получил...
все-таки, язык программирования должен быть логически непротиворечивым.[/uquote]
Получил, но ничего не понял
Смысл как раз в том, что в отличии от С в С++ оператор << считает '1' и 1 разными сущностями. Оператор - это по сути функция, т.е. можно было бы написать:
С++ напечатает скучные 1 1 1, так же как практически любой более-менее современный язык. Для С получим 49, 1 и какой-нибудь 536876220. Очень даже логично и непротиворечиво, особенно с точки зрения новичка
И после этого ты еще доказываешь, что то был сарказм и на самом деле тебе не нравятся штуки которые работают непонятно как или почему 
Добавлено after 25 minutes 8 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3708063#p3708063"]printf из stdlib — это же жесточайший оверхед!
Да и на кой черт он нужен, если вывести число в десятичной или 16-ричной системе легко и просто без printf? А флоаты на микроконтроллерах обычно не нужны.[/uquote]
Если вдруг флоаты нужны, то думаю далеко не все знают, что printf в принципе не способен с ними работать и дело не в самой функции, просто если используется переменное число параметров, то числа с плавающей точкой там передаются как double.
все-таки, язык программирования должен быть логически непротиворечивым.[/uquote]
Получил, но ничего не понял
Код: Выделить всё
print('1');
print(1);
print("1");
Добавлено after 25 minutes 8 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3708063#p3708063"]printf из stdlib — это же жесточайший оверхед!
Да и на кой черт он нужен, если вывести число в десятичной или 16-ричной системе легко и просто без printf? А флоаты на микроконтроллерах обычно не нужны.[/uquote]
Если вдруг флоаты нужны, то думаю далеко не все знают, что printf в принципе не способен с ними работать и дело не в самой функции, просто если используется переменное число параметров, то числа с плавающей точкой там передаются как double.
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Вопросы по С/С++ (СИ)
Reflector, мало того, что функции print() в стандарте С нет и я даже не представляю, откуда Вы ее вытащили, так ещё заставить компилятор спокойно конвертировать число в указатель или наоборот надо очень настойчиво попросить )
Re: Вопросы по С/С++ (СИ)
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3708086#p3708086"]Reflector, мало того, что функции print() в стандарте С нет и я даже не представляю, откуда Вы ее вытащили, так ещё заставить компилятор спокойно конвертировать число в указатель или наоборот надо очень настойчиво попросить )[/uquote]
Это умозрительный пример демонстрирующий идею. Если на С++ можно написать:
то это равносильно(опять же умозрительно
)
Если перегрузка функций так плоха, то чтобы это работало без нее все три аргумента разных типов должны приводится к некоему общему, например, к int.
На С print() может выглядеть так:
С++ такое уже не соберет, С просто ворнинги выдает, но если убирать перегрузку функций и операторов, то можно заставить такое работать и на С++, даже без предупреждений. Проблема только в том, что комитет по стандартизации ничего о таким инновационных предложениях ARV не знает 
Это умозрительный пример демонстрирующий идею. Если на С++ можно написать:
Код: Выделить всё
cout << '1' << 1 << "1";Код: Выделить всё
operator<<('1');
operator<<(1);
operator<<("1");
На С print() может выглядеть так:
Код: Выделить всё
void print(int val)
{
....
}
Последний раз редактировалось Reflector Пт сен 27, 2019 09:33:59, всего редактировалось 2 раза.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Технически, это не так (как уже выше объяснили). Для оператора "<<" '1' - символ, 1 - просто число (равно как и "1" - строка) - совершенно разные сущности. А то, что при преобразовании этих разных сущностей в строку для вывода на экран, получается внешне одно и то же - это уже совсем другое дело. Для каждого типа работает своя перегрузка оператора "<<", а вовсе не одна и та же функция.ARV писал(а):объяснения, с какого перепугу '1' и 1 оператор << "стандартно" считает одним и тем же, я так и не получил
Перегрузка вообще штука удобная. Те же, к примеру, функции в C - itoa, ltoa, ultoa, - делают по сути одно и то же, но для разных типов входного аргумента. В C++ подобное красиво решается перегрузкой функции. Хотя в новых стандартах C тоже можно похожее провернуть, немного другим путём, правда.
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Вопросы по С/С++ (СИ)
Reflector, для AVR в GCC double и fliat одно и то же. Поэтому ардуинщики с этой проблемой незнакомы.
И такой умозрительный пример к первому параметру функции в С неприменим.
Добавлено after 2 minutes 37 seconds:
Reflector, почему не соберёт? Нет в LIBC функции print(). Создавайте ее какой хотите )
Добавлено after 3 minutes 46 seconds:
WiseLord, я уже писал выше, почему недолюбливаю параметрический полиморфизм. А это уже реальная практика и множество потраченных часов.
И такой умозрительный пример к первому параметру функции в С неприменим.
Добавлено after 2 minutes 37 seconds:
Reflector, почему не соберёт? Нет в LIBC функции print(). Создавайте ее какой хотите )
Добавлено after 3 minutes 46 seconds:
WiseLord, я уже писал выше, почему недолюбливаю параметрический полиморфизм. А это уже реальная практика и множество потраченных часов.
Re: Вопросы по С/С++ (СИ)
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3708104#p3708104"]для AVR в GCC double и fliat одно и то же. Поэтому ардуинщики с этой проблемой незнакомы.[/uquote]
Я знаком, потому на STM32 у меня printf шаблонный.
Я знаком, потому на STM32 у меня printf шаблонный.
Не соберет, потому что в плюсах const char* неявно к int не приводится.почему не соберёт? Нет в LIBC функции print(). Создавайте ее какой хотите )
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
[uquote="ARV",url="/forum/viewtopic.php?p=3708044#p3708044"]объяснения, с какого перепугу '1' и 1 оператор << "стандхартно" считает одним и тем же, я так и не получил...[/uquote]Потому что cout предназначен для визуализации данных. Просишь показать символ - показывает символ, просишь число - получишь число. Даже если строку поиросишь - не обломаешься 
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Вопросы по С/С++ (СИ)
Reflector, я не вижу в Вашем примере указателя. Откуда он взялся?
Успешно компилится и работает как при C, так и C++ компиляции. О чем Вы?
Успешно компилится и работает как при C, так и C++ компиляции. О чем Вы?
Код: Выделить всё
#include <stdio.h>
int print(int i) {
printf("%d\n",i);
}
int main(void)
{
int j;
j=156;
print(j);
j=14;
print(j);
}
Re: Вопросы по С/С++ (СИ)
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3708117#p3708117"]я не вижу в Вашем примере указателя. Откуда он взялся?[/uquote]
Код: Выделить всё
print("1");
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Вопросы по С/С++ (СИ)
Reflector, я не понимаю о чем Вы. Объявляете функцию с типом аргумента int, а пытаетесь передать ей указатель? Зачем? Приведите весь код пожалуйста, как сделал я.
Re: Вопросы по С/С++ (СИ)
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3708153#p3708153"]Reflector, я не понимаю о чем Вы. Объявляете функцию с типом аргумента int, а пытаетесь передать ей указатель? Зачем? Приведите весь код пожалуйста, как сделал я.[/uquote]
Нужно внимательно читать что пишут, а не влезать в середину чужого разговора не понимая о чем речь, информации предоставлено достаточно даже чтобы ARV неспеша разобрался
Нужно внимательно читать что пишут, а не влезать в середину чужого разговора не понимая о чем речь, информации предоставлено достаточно даже чтобы ARV неспеша разобрался
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Вопросы по С/С++ (СИ)
Reflector, я внимательно читаю. Просто хочу от Вас добиться признания того, что параметрического полиморфизма в C++ вообще то нет и он реализуется статической надстройкой над мономорфным ядром языка. В результате, все плюсы параметрического полиморфизма теряются, так как один программист может ненароком поправить одну из статических конструкций для одного типа, забыв про остальные, а другой будет долго врубаться в непредсказуемое поведение программы.
Есть еще одна грабля. Возьмем классический код:
Что вернет последний вызов? )))
Есть еще одна грабля. Возьмем классический код:
Код: Выделить всё
template <typename T> T max(T x, T y)
{
if (x < y)
return y;
else
return x;
}
int main()
{
int a = max(10,15);
double f = max(123.11, 123.12);
char *s = max("last", "first");
}
Последний раз редактировалось ПростоНуб Пт сен 27, 2019 10:45:21, всего редактировалось 2 раза.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3708063#p3708063"]printf из stdlib — это же жесточайший оверхед!
Да и на кой черт он нужен, если вывести число в десятичной или 16-ричной системе легко и просто без printf?[/uquote]оверхед или нет - это зависит от многих условий. например, в большей части проектов на atmega8 значительного оверхеда не наблюдается, хватает памяти и быстродействия. ну а в бОльших МК и подавно.
главное назначение printf-а не числа выводить, а форматировать строки. если надо выводить с чередованием текст и числа, при этом числа должны занимать определенное место и количество знаков, то без printf-а получается не так уж и просто...
когда работаешь с консолью, надо выводить много красивого текста...
Да и на кой черт он нужен, если вывести число в десятичной или 16-ричной системе легко и просто без printf?[/uquote]оверхед или нет - это зависит от многих условий. например, в большей части проектов на atmega8 значительного оверхеда не наблюдается, хватает памяти и быстродействия. ну а в бОльших МК и подавно.
главное назначение printf-а не числа выводить, а форматировать строки. если надо выводить с чередованием текст и числа, при этом числа должны занимать определенное место и количество знаков, то без printf-а получается не так уж и просто...
когда работаешь с консолью, надо выводить много красивого текста...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Вопросы по С/С++ (СИ)
ARV, видимо, это специфика Ваших проектов. Мне как-то консоль в проектах на МК еще ни разу не понадобилась.


