Поддерживает ли Arduino IDE Вложенные функции? Какой вообще компилятор там и где весь синтаксис глянуть?
- Войдите на сайт для отправки комментариев
Чт, 10/03/2016 - 09:52
Поддерживает ли Arduino IDE Вложенные функции? Какой вообще компилятор там и где весь синтаксис глянуть?
Собственно ругается компилятор на скобочки, не может найти ))
Где вообще можно весь синтаксис глянуть? официальный есть ресурс?
А то вроде как и ООП даже есть а такие мелочи не поддерживает
какие мелочи? - скобки за тебя писать?
кретинам, забаненым на arduino.ru Программирование
вложенные поддерживает конечно. он обычно пишет правях или левых много, и показывает где
Поддерживает ли Arduino IDE Вложенные функции? Какой вообще компилятор там и где весь синтаксис глянуть?
Где вообще можно весь синтаксис глянуть? официальный есть ресурс?
Компилятор там gcc.
Гляньте стандарт С++ и документацию на gcc.
А то вроде как и ООП даже есть а такие мелочи не поддерживает
"Даже ООП" - есть в стандарте C++, а "такой мелочи" в стандарте нет. Вот такой Вам язык попался. В принципе, gcc, вроде, поддерживает влоенные функции, если правильно опции выставить, но как расширение языка, т.к. в стандарте языка ничего такого нет. Но, не думаю, что это расширение поддерживается в версии для AVR, т.к. вложенные функции довольно трудно реализовать на гарвардской архитектуре. На фон-неймановской они реализуются за счёт того, что исполняемый код размещается на стеке. Хотя, может как-то и реализовали, я специально не исследовал.
В стадарте С++ есть более продвинутая вещь - лямда-выражения, которые полностью перерывают функционал вложенных функций и дают ещё много чего другого. Пользуйтесь ими - это средство стандартное и от компилятора по идее не зависит.
ого как глубоко. я думал про банальное
Ну, не знаю, я-то подумал, что ТС имеет в виду честные вложенные - когда одна функция определяется внутри другой (и является локальной).
О том и речь )) что функция внутри функции обьявляется ) наподобии пользовательских классов
Зато однако меня порадовало, что можно функции хоть выше хоть ниже писать без пртотипов ))
Зато вот только щас опять на долбаный касяк Копилятора нарвался!
Нельзя комметрии /* */ внутри /* */ делать, падла достал уже ))
и они не работают
Зато вот только щас опять на долбаный касяк Копилятора нарвался!
то компилятор нарвался на косяк.
это почему нельзя комментарии делать? не замечал чтобы хоть раз ругался на комментарии внутри вложенных функций
Уважаемый ТС.
Я не силен в программировании микроконтроллеров, но МК это не интерпретатор JAVA. Тут вся суть программирования заключается в том, что нужно уложится в несколько килобайт компилированного кода.
Да... Прошли времена когда на моем МК-61 было 104 байта для программы и несколько байт для переменных.
Вижу, что наступит время когда умрет последний програмист который занет ассемблер и наступит темное время, когда начнут умирать ядра больших операционных систем и никто не сможет их починить.
Давеча искал библиотеку для своего LCD. - Нашел, но работала криво и медленно. Начал выбрасывать все не нужное и... О чудо!!!! Из огромной библиотеки осталось 10% кода.
Как все запущено. - Иду учить ассемблер.
О том и речь )) что функция внутри функции обьявляется ) наподобии пользовательских классов
Не вижу никакого подобия, но Вам виднее.
Зато однако меня порадовало, что можно функции хоть выше хоть ниже писать без пртотипов ))
Это самое мерзкое, что они могли придумать нагло насрав на стандарт языка - это создаёт массу проблем при программировании. Так что не знаю, чему Вы радуетесь.
Зато вот только щас опять на долбаный касяк Копилятора нарвался!
Нельзя комметрии /* */ внутри /* */ делать, падла достал уже ))
Это косяк Вашего знания языка. Такие комментарии не вкладываются по стандарту языка и компилятор точно следует стандарту, а не Вашим фантазиям.
Arduina и ассемблер несовместимы, одна идея другой противоречит ))
Нравится ассемблер вот и купи себе Тиню 2313 и кодь её ))
Вложенные фукции наврятли делают код тяжёлым сравнению с ООП например или массивами )
Иду учить ассемблер.
сразу в машинном коде - хули тратить бесценные машинные ресурсы на компилляцию?
"Это косяк Вашего знания языка. Такие комментарии не вкладываются по стандарту языка и компилятор точно следует стандарту, а не Вашим фантазиям."
Вообще тут не в компиляторе дело, а в среде
В любой среде программирования можно вложенные комметарии делать, это очень удобно, не нравится, не делай, а по поводу прототипов то они просто не нужны видимо из-за отсутствия сложных синтаксических конструкций или объясняет полдучасовую компиляцию скетчей ))
Можно ещё триггеры компановать в логичекие цепочки ))
"Это самое мерзкое, что они могли придумать нагло насрав на стандарт языка - это создаёт массу проблем при программировании."
а в чём проблемы то могут быть ?
Я вижу тут есть два типа хобби-програмистов.
Первый начинает с arduino и понемногу движется к ООП. Когда не хватает мощностей, то переходят на более мощную arduin-у. Это все заканчивается на переход к "raspberry pi" и дальше. Ихние изделия становятся красивыми и красочными.
Второй тип хобби-програмистов движутся в другую сторону. Они начинают изучать регистры, прерывания, отказываются от digitalwrite, analogread, и постепенно переходять на avr studio. Ихние изделия становятся маленькими, дешовыми и экономичными.
Мне трудно определить какой путь лучше.
Я вижу тут есть два типа хобби-програмистов.
Первый начинает с arduino и понемногу движется к ООП. Когда не хватает мощностей, то переходят на более мощную arduin-у. Это все заканчивается на переход к "raspberry pi" и дальше. Ихние изделия становятся красивыми и красочными.
Второй тип хобби-програмистов движутся в другую сторону. Они начинают изучать регистры, прерывания, отказываются от digitalwrite, analogread, и постепенно переходять на avr studio. Ихние изделия становятся маленькими, дешовыми и экономичными.
Мне трудно определить какой путь лучше.
Надо применять ассемблер там где он нужен, если нужен вообще, от него уходят потихоньку, тем более в С низкоуровневость есть и применять ООП там где оно нужно
я скорее второй путь выбрал. изделия дешевые и маленькие, и некрасивые. но регистров не знаю, прерывания только отсюда
Вообще тут не в компиляторе дело, а в среде
Правила записи комментариев определяются стандартом языка. Среда тут не при делах.
Если сильно нужна вложенная функция, её легко эмулировать через lambda-выражение
Здесь kv вполне себе "вложенная функция".
Только не забудьте включить опцию -std=c++11
Вообще тут не в компиляторе дело, а в среде
Правила записи комментариев определяются стандартом языка. Среда тут не при делах.
среда может показывать тебе комментарии а компилятору не показывать ))
а в чём проблемы то могут быть ?
Нельзя использовать собственные типы (или классы) в параметрах и возвращаемых значения функций.
Например, вот такая конструкция с точки зрения языка абсолютно корректна. Однако, попробуйте её скомпилировать в среде Ардуино.
среда может показывать тебе комментарии а компилятору не показывать ))
Это и есть мерзость (см. мой пост про собственные типы чуть выше). Это приводит к абсолютно непонятным сообщениям компилятора. Пусть уж лучше она показывает компилятору в точности то, что я написал. Кто, блин, в доме хозяин я - или дебильный редактор.
а в чём проблемы то могут быть ?
Нельзя использовать собственные типы (или классы) в параметрах и возвращаемых значения функций.
Например, вот такая конструкция с точки зрения языка абсолютно корректна. Однако, попробуйте её скомпилировать в среде Ардуино.
наверняка могу сказать что функции принимают Обьекты типа Класс, насчёт возвращения не знаю не пробовал, ну указатели то можно
Може тему
typedef не нравится
среда может показывать тебе комментарии а компилятору не показывать ))
Это и есть мерзость (см. мой пост про собственные типы чуть выше). Это приводит к абсолютно непонятным сообщениям компилятора. Пусть уж лучше она показывает компилятору в точности то, что я написал. Кто, блин, в доме хозяин я - или дебильный редактор.
наверняка могу сказать что функции принимают Обьекты типа Класс, ... ну указатели то можно
Вы ошибаетесь - нельзя. Попробуйте:
Може тему
typedef не нравится
releyshic, я - профессионал, и если я что-то говорю, то отвечаю за свои слова. Конструкция, которую я написал абсолютно корректна.
Не нравится ему то, что дебильная среда ради того, чтобы Вы могли размещать функции где попало, сама вставляет в код предварительные объявления функций в самом начале. В результате они оказываютя ВЫШЕ обявлений типов и классов.
Т.е. авторы IDE просто поглумились над программой, а Вас это почему-то радует.
наверняка могу сказать что функции принимают Обьекты типа Класс, ... ну указатели то можно
Вы ошибаетесь - нельзя. Попробуйте:
Може тему
typedef не нравится
releyshic, я - профессионал, и если я что-то говорю, то отвечаю за свои слова. Конструкция, которую я написал абсолютно корректна.
Не нравится ему то, что дебильная среда ради того, чтобы Вы могли размещать функции где попало, сама вставляет в код предварительные объявления функций в самом начале. В результате они оказываютя ВЫШЕ обявлений типов и классов.
Т.е. авторы IDE просто поглумились над программой, а Вас это почему-то радует.
я инклудами подключал сpp, ссылки и оъекты принимал на ура, возвращать не пробовал
к тому же этот код у меня работает, в скетче работает
я инклудами подключал сpp, ссылки и оъекты принимал на ура, возвращать не пробовал
Не сомневаюсь. Инклудами - пожалуйста. И возвращать, кстати, можете сколько угодно. Разве я где-то говорил про инклуды? Я говорил про определения класса в том же файле.
А ещё точнее - я говорил в целом о том, что из-за дебильных дествий разработчиков IDE (которым Вы радуетесь) не работают абсолютно корректные язывковые конструкции. Руки повыдёргивать за такие "усовершенствования" надо.
Ну, не знаю, я-то подумал, что ТС имеет в виду честные вложенные - когда одна функция определяется внутри другой (и является локальной).
а что ещё другое может быть?
я это собственно и имел ввиду мне локальная нужна функция
Ну и делайте, как я написал в посте №21, нахрена это нужно, я не понимаю, но если нужно - делайте.
Зачем вам локальные функции?
Если одна функция определяется в другой, то это не приводит к никакой экономии памяти, ибо все равно эта функция лежит в микроконтроллере.
Для удобства? А какое может быть удобство в нескольких килобайт машинного кода.
Конечно программировать используя ООП довольно удобно, но тогда перестаешь понимать куда девается память и почему контроллер начинает прос так перегружатся.
И меня действительно удручает отсутствие порядка обявления функций. Но тут есть нюанс. Функции все и всегда загруженны в память и каждая имеет свой адрес. Все функции всегда присутствуют в контроллере и пофигу когда их объявляли.
Зачем вам локальные функции?
Если одна функция определяется в другой, то это не приводит к никакой экономии памяти, ибо все равно эта функция лежит в микроконтроллере.
Для удобства? А какое может быть удобство в нескольких килобайт машинного кода.
Конечно программировать используя ООП довольно удобно, но тогда перестаешь понимать куда девается память и почему контроллер начинает прос так перегружатся.
И меня действительно удручает отсутствие порядка обявления функций. Но тут есть нюанс. Функции все и всегда загруженны в память и каждая имеет свой адрес. Все функции всегда присутствуют в контроллере и пофигу когда их объявляли.
причём тут ООП? оно вообще тут никаким боком/
Мне кажется порядок всё же есть при явном указании прототипов, но это пробовать надо
я инклудами подключал сpp, ссылки и оъекты принимал на ура, возвращать не пробовал
Не сомневаюсь. Инклудами - пожалуйста. И возвращать, кстати, можете сколько угодно. Разве я где-то говорил про инклуды? Я говорил про определения класса в том же файле.
А ещё точнее - я говорил в целом о том, что из-за дебильных дествий разработчиков IDE (которым Вы радуетесь) не работают абсолютно корректные язывковые конструкции. Руки повыдёргивать за такие "усовершенствования" надо.
так в твоём примере же и есть "Я говорил про определения класса в том же файле." и он работает в скетче
так в твоём примере же и есть "Я говорил про определения класса в том же файле." и он работает в скетче
Мой пример работает в скетче? Вы бредите :) Вы что-то перепутали - такое работать не может.
работает и не лень даже было циферки твои убирать номера строк
http://www.fayloobmennik.net/5910132
скетч и фото
http://www.fayloobmennik.net/5910138
Я не знаю, что это за картинка. У меня выдаётся вот такое сообщение:
Я не знаю, что это за картинка. У меня выдаётся вот такое сообщение:
значит среда другая у меня 1.6.7 или в настройках нах***ертил
убери ; после конструктора
пора пересаживаться на Visual Micro, задолбался ждать компиляции, тем более с ТФТ работаю и с РТЦ впридачу
я инклудами подключал сpp, ссылки и оъекты принимал на ура, возвращать не пробовал
Не сомневаюсь. Инклудами - пожалуйста...
Добавлю к вашему диалогу, что инклудить можна не только стандартные *.h но и другие файлы. Например *.inc. При этом ИДЕ не признает эти файлы своими, не открывает их в закладках и не поганит своим препроцессором. Так можна руские строки цеплять в проект. Но, к сожалению надо полный путь указывать, притом в ДОС формате типа
#include "C:/Documents and Settings/DED5~1/C316~1/Arduino/Osciloscop_32/str.inc"
Это из 1.6.5.
Но если объявить функцию в нужном месте, то компиляция проходит.
Но если объявить функцию в нужном месте, то компиляция проходит.
Понимаете, то, что проблему можно как-то решить - сомнений нет. Беда-то в том, что тот код, который не проходит, абсолютно корректен с точки зрения языка, но из-за их идиотских "улучшений" он не компилируется - за такое разработчикам среды надо руки отрывать. Вот собственно всё, что я хотел сказать.
И это не единствееная беда. Там ещё с условной копиляцией проблемы возникают из-за того же.
Беда-то в том, что тот код, который не проходит, абсолютно корректен с точки зрения языка, но из-за их идиотских "улучшений" он не компилируется - за такое разработчикам среды надо руки отрывать.
Согласен, проблемы есть. Сам сейчас пытаюсь большой си-шный проект в Ардуину запихать,
Что мешает собраться всем на форуме и клонировать Arduino IDE, улучшив среду разработки так, чтобы все си-шные процедуры в ней выполнялись.
P.S. Что касается примера с классами и функциями, то меня ещё в прошлом веке учили (и сам учился), что функцию сначала нужно объявить, а затем описать. Сейчас мы просто расслабились и позволяем компилятору самому объявлять за нас функции.
Что мешает собраться всем на форуме и клонировать Arduino IDE, улучшив среду разработки так, чтобы все си-шные процедуры в ней выполнялись.
"За всю Одессу" не скажу, а что лично мне мешает этим заняться, ответить могу.
Мешает отсутствие потребности. Зачем, когда есть AVR-студия? Лично я нормально живу и с IDE и со студией, когда надо. А делать что-то своё - надо понимать что ты от этого поимеешь. Вариантов собственно два: удовольствие или деньги (или и то, и другое в каких-то пропорциях). Удовольствия от такой работы я лично не получу - с точки зрения программирования она тривиальна, но при этом весьма трудоёмка. Денег тут тоже не поднять - какой дурак будет мне платить, когда есть бесплатная AVR-студия, да и и IDE тоже. Потому я и не делаю.
Беда-то в том, что тот код, который не проходит, абсолютно корректен с точки зрения языка, но из-за их идиотских "улучшений" он не компилируется - за такое разработчикам среды надо руки отрывать.
Согласен, проблемы есть. Сам сейчас пытаюсь большой си-шный проект в Ардуину запихать,
Что мешает собраться всем на форуме и клонировать Arduino IDE, улучшив среду разработки так, чтобы все си-шные процедуры в ней выполнялись.
P.S. Что касается примера с классами и функциями, то меня ещё в прошлом веке учили (и сам учился), что функцию сначала нужно объявить, а затем описать. Сейчас мы просто расслабились и позволяем компилятору самому объявлять за нас функции.
сначала не было объявлений вообще, их ввели для удобства чтобы запихивать тела функции куда попало и вызывать откуда хочется. Функции были цельными
Что мешает собраться всем на форуме и клонировать Arduino IDE, улучшив среду разработки так, чтобы все си-шные процедуры в ней выполнялись.
"За всю Одессу" не скажу, а что лично мне мешает этим заняться, ответить могу.
Мешает отсутствие потребности. Зачем, когда есть AVR-студия? Лично я нормально живу и с IDE и со студией, когда надо. А делать что-то своё - надо понимать что ты от этого поимеешь. Вариантов собственно два: удовольствие или деньги (или и то, и другое в каких-то пропорциях). Удовольствия от такой работы я лично не получу - с точки зрения программирования она тривиальна, но при этом весьма трудоёмка. Денег тут тоже не поднять - какой дурак будет мне платить, когда есть бесплатная AVR-студия, да и и IDE тоже. Потому я и не делаю.
конечно нет смысла делать, это очевидно )
но вот могли бы Хорошие качественные уроки сделать по AVR-студии на русском нажстройке ардино к ней
Что мешает собраться всем на форуме и клонировать Arduino IDE, улучшив среду разработки так, чтобы все си-шные процедуры в ней выполнялись.
что мешает ЕвгенийП, юзать актуальные версии Дуино ИДЕ?
а в чём проблемы то могут быть ?
Нельзя использовать собственные типы (или классы) в параметрах и возвращаемых значения функций.
Например, вот такая конструкция с точки зрения языка абсолютно корректна. Однако, попробуйте её скомпилировать в среде Ардуино.
попробовал, и чего?
Вы ошибаетесь - нельзя. Попробуйте:
попробовал:
Т.е. авторы IDE просто поглумились над программой, а Вас это почему-то радует.
прошу авторов Дуино ИДЕ прекратить глумиться над ЕвгенийП!
Я не знаю, что это за картинка. У меня выдаётся вот такое сообщение:
ну, да - "я не знаю", "я-профессионал", "я ищу баги в гавне мамонта, в то время, как непрофессионалы не могут понять, в чём, собственно, проблема..."
*всем непрофессионалам, срочно перейти на версию Дуино ИДЕ 0.1, дабы быть с ЕвгенийП на одной волне и испытывать аналогичный батхерт профессионализму!