Easyelectronics.ru

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

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



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

Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: микросишечка
СообщениеДобавлено: 03 сен 2019, 10:14 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2417
Откуда: Китай, Пекин
Код:
int main() {                          \
   for (int i = 0; i < 45; i++)       \
      for (int k = 0; k < 45; k++)    \
         std::cout << "Hello, World!" << std::endl;
   return 0;
}


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

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 10:39 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4016
Откуда: КЧР, поселок Нижний Архыз
И где тут сишечка, а, чоблин?
Как я и подозревал, если выкинуть крестятину, код будет полностью работоспособным (а почему бы ему не работать, если все по стандарту C99?):
Код:
#include <stdio.h>
int main() {                      \
  for (int i = 0; i < 45; i++)    \
  for (int k = 0; k < 45; k++)    \
  printf("Hi, there!\n");
  return 0;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 10:47 
Старожил
Аватара пользователя

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

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 10:51 
Старожил

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 14:44 
Заглядывает иногда

Зарегистрирован: 10 мар 2012, 11:11
Сообщения: 142
А что тут необычного! В чём подвох? Хоть с BS, хоть без должно работать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 16:37 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3662
Чоблин, верно, удивлен значкам << в столь необычной позиции? :))) Иль какие другие значки его смусчають?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 16:55 
Старожил
Аватара пользователя

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

в результате сгенерированный код вместо того чтобы стать макросом превращается в исполняемый. я офигиваю
и пишу микросишечку.
что я ожидал от компилятора?
я ждал что он скажет... ээээ.... тут у тебя странности, ты б определился нафига тебе эти слэши ВНЕ макроса

_________________
unirail.org


Последний раз редактировалось cheblin 03 сен 2019, 16:58, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 16:57 
Старожил

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 16:58 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3662
Такой вот хреновый у вас, сударь, кододегенератор :))))
Чтобы макросом быть, надобно #define вначале ставить и имя макроса давать. Кодогенератор - фтопку!
И вообще - в C++ да макросы?


Последний раз редактировалось BusMaster 03 сен 2019, 17:00, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 17:00 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2417
Откуда: Китай, Пекин
да он мне регулярно выдаёт такой код что ...только по С - 2 баг репорта (кстати досих пор починить не могут уже 3 месяца прошло)

Цитата:
ты для полноты забыл дефайны добавить.

он был, я ж говорб прога форматирования при определенных обстоятельствах вставляет перевод строки...
и фсё.

макрос превращается в исполняемый код, а компилятор... не давится

Цитата:
И вообще - в C++ да макросы?

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

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 17:08 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3662
Макрос в результате подстановки и БУДЕТ превращаться в исполняемый код. Какие претензии к макросу то? Все вопросы - к IDE.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 17:14 
Старожил
Аватара пользователя

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

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 17:16 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1024
cheblin писал(а):
ага. ибо шаблоны при определенных обстоятельствах весьма убоги. и неудобны
если нужно передать кусок кода на исполнение ....
выбор: лямбды, либо ссылка на функцию
и то идругое по сравнению со старыми добрыми макросами фигня на палочке

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 17:28 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3662
cheblin писал(а):
если случайно влепить перевод строки в теле макроса, то все что ниже перевода строки из тела макроса превратится в обычный исполняемый код, а не в код макроса

Как это??
"Нам кажется, мы не понимаем ваших проблем" :))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 17:33 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2417
Откуда: Китай, Пекин
Код:
#define v3List_4_X4_X5_v3List_d0_d1_d2( v3List_4_X4_X5_ptr )\
   for(size_t  d0=0, d1=0, d1max, d2=0, d2max, bbox_ = 1; d0 <SIZE_MAX; d0 = SIZE_MAX )\
       for( const auto is_v3List_exists__ = v3List_4_X4_X5_ptr v3List(); d0 <SIZE_MAX && is_v3List_exists__.IS_EXISTS; d0 =SIZE_MAX )\
         for( const auto if_v3List_exists__ = is_v3List_exists__.CASE.EXISTS; d1max = if_v3List_exists__.d1(), d2max = if_v3List_exists__.d2(),   d0 < org::unirail::demo::v3List_4_X4_X5::v3List_::d0 ;  d0++)\
            for( d1 = 0; d1 < d1max ; d1++)\
               for( d2 = 0; d2 < d2max ;bbox_ = 1,  d2++)\
                  for(auto src_v3List = if_v3List_exists__.get(d0,d1,d2); src_v3List.IS_EXISTS &&   bbox_ ; bbox_-- )


вызов

Код:
v3List_4_X4_X5_v3List_d0_d1_d2(EMPTY_ARG)
                    {
                        auto dst_v3List = dst.v3List(d0, d1, d2);
                        if(dst_v3List.has_value_())
                            src_v3List.CASE.EXISTS.pack.push_data_(dst_v3List);
                    }


что происходит

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

по значениям приходится пробегаться часто, в принципе не сложно написать всё это в ручную, но я предоставляю выбор
в виде предсгенеренных макросов.
хочешь -
1)пиши в ручную
2)пиши в ручную - поглядывая как там правильно в код макроса
3)используй макрос
4)используй макрос, но в IDE потребуй раскрытия в код, чтоб подправить полученый код до нужного функционала...

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 17:39 
Заглядывает иногда

Зарегистрирован: 28 сен 2018, 00:25
Сообщения: 163
Ответ: код рабочий, ИДЕ - гавно, раз позволяет себе вставлять где попало переводы строки.
Но вопрос остается прежний: С(++) тут при чем?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 17:45 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2417
Откуда: Китай, Пекин
cubot писал(а):
Ответ: код рабочий, ИДЕ - гавно, раз позволяет себе вставлять где попало переводы строки.


форматированием сгенеренного кода занимается AStyle . это в нём бага. отлавливать не стал. просто затрахался ловить баги в сторонних продуктах.

Цитата:
Но вопрос остается прежний: С(++) тут при чем?

именно поэтому озаглавлено микросишечка.

ибо я уже писал выше
Цитата:
что я ожидал от компилятора?
я ждал что он скажет... ээээ.... тут у тебя странности, ты б определился нафига тебе эти слэши ВНЕ макроса

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 17:55 
Заглядывает иногда

Зарегистрирован: 28 сен 2018, 00:25
Сообщения: 163
А с точки зрения компилятора здесь ничего странного и нет. И вообще, насколько я понимаю, до компилятора вот эти слэши вообще не доходят - это обрабатывает и выпиливает препроцессор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 18:24 
Старожил

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 19:50 
Старожил
Аватара пользователя

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

я этот путь прошел, а не как ты - бла-бла.
единственный вариант, сравнимый по удобству с макросами, который выше - это передавать лямбду в шаблон.

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

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 20:31 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2623
Откуда: Санкт-Петербург
Прошёл он... Язык, на который код генерит, выучить не удосужился, пример в вопросе постит такой, что вопрос теряет смысл (ну нету в коде ошибки без #define) - можно ли ожидать, что разобрался с более сложным языком?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 20:34 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1024
cheblin писал(а):
ты сначала попробуй подобное на шаблонах наколбасить, а потом обсудим.

Простейший пример:
Код:
void f(int i, int j)
{
   rtt.printf("%d, %d\n", i, j);
}

template<auto f>
void test()
{
   for(int i = 0; i < 10; i++)
      f(i, i * i);
}

test<f>();

Что изменится если будет 6 вложенных циклов, а в функцию нужно будет передавать 5 аргументов? К тому же обе функции всегда можно принудительно заинлайнить...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 20:57 
Старожил
Аватара пользователя

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

код превратится просто в ад и израиль.

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

Цитата:
генерит, выучить не

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

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 21:08 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1024
cheblin писал(а):
угу и на каждый чих по функции, а нужные переменные из окружения передавать в виде аргументов....
проходили.

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

Цитата:
код превратится просто в ад и израиль.

Т.е. сейчас у тебя нормальный код? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: микросишечка
СообщениеДобавлено: 03 сен 2019, 21:14 
Старожил
Аватара пользователя

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


не...

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

удобно да?
Цитата:
Т.е. сейчас у тебя нормальный код? :)

более чем
и я описал альтернативы
Цитата:
хочешь -
1)пиши в ручную
2)пиши в ручную - поглядывая как там правильно в код макроса
3)используй макрос
4)используй макрос, но в IDE потребуй раскрытия в код, чтоб подправить полученый код до нужного функционала...

_________________
unirail.org


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

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


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

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


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

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

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