Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Вопросы по С/С++ (СИ)

Сообщение dosikus »

Это что форум чудит? Цитаты другим присваивает.
Давеча лицезрел как рефлектор сам с собой дискутировал. :)))
Реклама
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Вопросы по С/С++ (СИ)

Сообщение Ivanoff-iv »

кроме того что я должен понять кгда '1' перестала быть равна 0x31, на эти преобразования тратятся и ресурсы мк... или нет?
____
он рефлексировал... :)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Eddy_Em »

ARV писал(а):cout вы вряд ли в МК будете использовать
Он - может и не будет. Но абдуринщиков, которые printf в микроконтроллер пихают — пруд пруди! Они еще флоаты любят на всяких тиньках... Жестокие!..
Вот такие чуды-юды могут и cout запихнуть в МК! Им-то пофиг, что мигалка светодиодом 128кБ флеша сжирает!

Добавлено after 1 minute 37 seconds:
[uquote="dosikus",url="/forum/viewtopic.php?p=3708045#p3708045"]Это что форум чудит? Цитаты другим присваивает.
Давеча лицезрел как рефлектор сам с собой дискутировал. :)))[/uquote]
Здесь идиотизм с интерфейсом: если ты однократно отвечаешь, нажимая кнопочку "цитата", то кнопочка расположена под сообщением. Но если отвечаешь мультицитированием, то кнопочка над сообщением!
Кто такой маразм придумал — не знаю, но я первые несколько сообщений тоже постоянно не туда жамкал! А в итоге выделенный текст копируется, но автор подставляется не тот...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

Eddy_Em писал(а):Но абдуринщиков, которые printf в микроконтроллер пихают — пруд пруди!
скажу больше: я тут многих никак не могу убедить, что printf - удобно, и его не только можно, но и нужно применять в проектах :) видимо, вас наслушались все и корябают свои функции вывода :)

лично я в своих проектах с USART почти всегда использую printf, хотя и для ЖКИ и даже 7-сегментных индикаторов тоже применял :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Eddy_Em »

printf из stdlib — это же жесточайший оверхед!
Да и на кой черт он нужен, если вывести число в десятичной или 16-ричной системе легко и просто без printf? А флоаты на микроконтроллерах обычно не нужны. Если даже и нужны, то несложно свою функцию вывода накалякать. И флеш в итоге сэкономить можно, и производительность увеличить по сравнению с жирным и тормозным printf'ом.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

[uquote="ARV",url="/forum/viewtopic.php?p=3708044#p3708044"]объяснения, с какого перепугу '1' и 1 оператор << "стандартно" считает одним и тем же, я так и не получил...
все-таки, язык программирования должен быть логически непротиворечивым.[/uquote]
Получил, но ничего не понял :) Смысл как раз в том, что в отличии от С в С++ оператор << считает '1' и 1 разными сущностями. Оператор - это по сути функция, т.е. можно было бы написать:

Код: Выделить всё

print('1');
print(1);
print("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.
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

Reflector, мало того, что функции print() в стандарте С нет и я даже не представляю, откуда Вы ее вытащили, так ещё заставить компилятор спокойно конвертировать число в указатель или наоборот надо очень настойчиво попросить )
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3708086#p3708086"]Reflector, мало того, что функции print() в стандарте С нет и я даже не представляю, откуда Вы ее вытащили, так ещё заставить компилятор спокойно конвертировать число в указатель или наоборот надо очень настойчиво попросить )[/uquote]
Это умозрительный пример демонстрирующий идею. Если на С++ можно написать:

Код: Выделить всё

cout << '1' << 1 << "1";
то это равносильно(опять же умозрительно :) )

Код: Выделить всё

operator<<('1');
operator<<(1);
operator<<("1");
Если перегрузка функций так плоха, то чтобы это работало без нее все три аргумента разных типов должны приводится к некоему общему, например, к int.
На С print() может выглядеть так:

Код: Выделить всё

void print(int val)
{
    ....	
}
С++ такое уже не соберет, С просто ворнинги выдает, но если убирать перегрузку функций и операторов, то можно заставить такое работать и на С++, даже без предупреждений. Проблема только в том, что комитет по стандартизации ничего о таким инновационных предложениях ARV не знает :)
Последний раз редактировалось Reflector Пт сен 27, 2019 09:33:59, всего редактировалось 2 раза.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение WiseLord »

ARV писал(а):объяснения, с какого перепугу '1' и 1 оператор << "стандартно" считает одним и тем же, я так и не получил
Технически, это не так (как уже выше объяснили). Для оператора "<<" '1' - символ, 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, я уже писал выше, почему недолюбливаю параметрический полиморфизм. А это уже реальная практика и множество потраченных часов.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3708104#p3708104"]для AVR в GCC double и fliat одно и то же. Поэтому ардуинщики с этой проблемой незнакомы.[/uquote]
Я знаком, потому на STM32 у меня printf шаблонный.
почему не соберёт? Нет в LIBC функции print(). Создавайте ее какой хотите )
Не соберет, потому что в плюсах const char* неявно к int не приводится.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Вопросы по С/С++ (СИ)

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=3708044#p3708044"]объяснения, с какого перепугу '1' и 1 оператор << "стандхартно" считает одним и тем же, я так и не получил...[/uquote]Потому что cout предназначен для визуализации данных. Просишь показать символ - показывает символ, просишь число - получишь число. Даже если строку поиросишь - не обломаешься :)
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

Reflector, я не вижу в Вашем примере указателя. Откуда он взялся?

Успешно компилится и работает как при 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);
}
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3708117#p3708117"]я не вижу в Вашем примере указателя. Откуда он взялся?[/uquote]

Код: Выделить всё

print("1");
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

Reflector, я не понимаю о чем Вы. Объявляете функцию с типом аргумента int, а пытаетесь передать ей указатель? Зачем? Приведите весь код пожалуйста, как сделал я.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Вопросы по С/С++ (СИ)

Сообщение Reflector »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3708153#p3708153"]Reflector, я не понимаю о чем Вы. Объявляете функцию с типом аргумента int, а пытаетесь передать ей указатель? Зачем? Приведите весь код пожалуйста, как сделал я.[/uquote]
Нужно внимательно читать что пишут, а не влезать в середину чужого разговора не понимая о чем речь, информации предоставлено достаточно даже чтобы 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: Вопросы по С/С++ (СИ)

Сообщение ARV »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3708063#p3708063"]printf из stdlib — это же жесточайший оверхед!
Да и на кой черт он нужен, если вывести число в десятичной или 16-ричной системе легко и просто без printf?[/uquote]оверхед или нет - это зависит от многих условий. например, в большей части проектов на atmega8 значительного оверхеда не наблюдается, хватает памяти и быстродействия. ну а в бОльших МК и подавно.

главное назначение printf-а не числа выводить, а форматировать строки. если надо выводить с чередованием текст и числа, при этом числа должны занимать определенное место и количество знаков, то без printf-а получается не так уж и просто...

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

Мой уютный бложик... заходите!
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Вопросы по С/С++ (СИ)

Сообщение ПростоНуб »

ARV, видимо, это специфика Ваших проектов. Мне как-то консоль в проектах на МК еще ни разу не понадобилась.
Ответить

Вернуться в «Разные вопросы по МК»