Процедуры и функции
- Войдите на сайт для отправки комментариев
Пнд, 28/01/2019 - 11:53
День добрый!
Есть непонятки с основами языка "си". На форуме и в разделе "Программирование" ответа не нашёл.
Мне нужна функция (или процедура), которая возвращает несколько значений, а не одно.
Или выход только один - создавать глобальные переменные и использовать их в функции void() ?
В Си - С++ функции не могут возвращать более одного значения. Но выходов из этой ситуации на самом деле несколько. Наиболее употребительный - возвращать ссылку на структуру, массив или класс, в котором уже передавать нужные данные
если требуется возвращать не одно значение - на 90% - проблема в архитектуре программы.
Понял. СПАСИБО!
А ещё говорят, что "си" лудше Паскаля". Извиняюсь за спам. :))
а шо, таки в паскале научились много значений из функции возвращать?
Извиняюсь. Не хотел никоко обидеть. В Паскале есть процедуры, в которых можно задать сколь угодно аргументов и получить несколько значений. Например procedure my(a,b : Integer; var c,d,e : byte)
Друзья, всем спасибо за оперативный ответ! Быстро помогли разоббратья с моей проблемой. Спасибо.
в С++ тоже есть. аналог паскалевких var переменных - указатели
в С++ тоже есть. аналог паскалевких var переменных - указатели
А в Arduino IDE этого, я так понимаю, нет?
всё есть, полный комплект искаропки.
Наиболее употребительный - возвращать ссылку на структуру, массив или класс, в котором уже передавать нужные данные
Пролетели мимо глаз слова "возвращать ссылку на структуру". Теперь всё ясно. Спасибо разъяснили всё.
Дальше уже сам разберусь.
PS. Я был не прав со своей шуточкой. Теперь выгляжу глупо. :)
Мне нужна функция (или процедура), которая возвращает
Процедура не может ничего возвращать по определению. Она вызывается только для побочного эффекта.
Во блин!!! А в ассемблере я через стек 100500 параметров возвращал )))
На PC правда стек растет вниз и одним сегментом 64к
День добрый!
Есть непонятки с основами языка "си". На форуме и в разделе "Программирование" ответа не нашёл.
Мне нужна функция (или процедура), которая возвращает несколько значений, а не одно.
Или выход только один - создавать глобальные переменные и использовать их в функции void() ?
Есть ещё такие звери, как ссылки, меня тут как раз просветили в: http://arduino.ru/forum/obshchii/ssylki-s.
То есть вы объявляете сколько угодно переменных, вызываете функцию, передавая ей свои переменные ссылками, она возвращает вам успех или неуспех, но ваши переменные чудесным образом меняет как вам надо, т.е. возвращает столько значений, сколько вы ей передали. И скорее всего, вы память на указатели не израсходуете.
Есть ещё такие звери, как ссылки, меня тут как раз просветили в: http://arduino.ru/forum/obshchii/ssylki-s.
То есть вы объявляете сколько угодно переменных, вызываете функцию, передавая ей свои переменные ссылками, она возвращает вам успех или неуспех, но ваши переменные чудесным образом меняет как вам надо, т.е. возвращает столько значений, сколько вы ей передали. И скорее всего, вы память на указатели не израсходуете.
Не, ну это не кошерно. Так и до глобальных переменных можно дойти, а они - зло. Ибо в достаточно большой программе легко можно их поменять, а где и не понятно...
Не, ну это не кошерно. Так и до глобальных переменных можно дойти, а они - зло. Ибо в достаточно большой программе легко можно их поменять, а где и не понятно...
это когда на пенсии, а по молодости ничего 3,6 килобайта машинного кода и ни одной ошибки
Есть ещё такие звери, как ссылки,
Нету.
ТС ведь говорил про
язык "си"
А там нету ссылок :(
язык "си"
А там нету ссылок :(
Дискуссионный момент! В том "си", в котором есть функция void(), вполне могут завестись и ссылки.
Во блин!!! А в ассемблере я через стек 100500 параметров возвращал )))
На PC правда стек растет вниз и одним сегментом 64к
Во блин!!! А в ассемблере я через стек 100500 параметров возвращал )))
На PC правда стек растет вниз и одним сегментом 64к
всё что было необходимо...еще DR-DOS ...TR-DOS...Альфа-ДОС ...под СP/M-86 ничего не писал, а было еще что-то от ДОС? а забыл был же еще SCO UNIX )))
Дискуссионный момент! В том "си", в котором есть функция void(), вполне могут завестись и ссылки.
Никаких дискуссий! Самодеятельность компилятора - это самодеятельность компилятора, там хоть camefrom может быть, а что есть или чего нет в языке - см. действующий (2018 года) стандарт Си. Ссылку на документ я давал в "песочнице". Нету там ссылок :(
До канпиляторя человек еще не дошел. void() у него в основах основ числится. Так что я предполагаю, что его язык выпал из параллельной реальности.
это когда на пенсии, а по молодости ничего 3,6 килобайта машинного кода и ни одной ошибки
То что они ещё никак себя не проявили, не значит что их нет.)
это когда на пенсии, а по молодости ничего 3,6 килобайта машинного кода и ни одной ошибки
То что они ещё никак себя не проявили, не значит что их нет.)
их там нет, писалось на ассемблере с абсолютным пониманием до байта, что это такое и зачем оно нужно, если бы были за десяток лет эксплуатации вылезло...
Умом понимаю, что этого не может быть, но доказать обратное не получилось...
Проверялись все регистры микропроцессора на уровне исполнения каждой машинной команды...
Если что и могло вылезти, то только в контроллере ПДП, работа велась с ним...
Но тут "сын за отца не отвечает"...
PS ради интереса смотрел в кодах BIOS аналогичные функции - реализовано практически один в один на уровне машинных команд...
их там нет
И сколько там этих ихтамнетов? Одному Богу известно!
Есть фундаментальный закон который стар, как само программирование. Его никто не отменял и никогда не отменит: "every last bug you found is actually the penultimate".
их там нет
И сколько там этих ихтамнетов? Одному Богу известно!
Есть фундаментальный закон который стар, как само программирование. Его никто не отменял и никогда не отменит: "every last bug you found is actually the penultimate".
Да я закон знаю и, даже приму, что может одна и есть, ранее не нашлась, а теперь это никому и не нужно )))
В студию сверкающий бриллиант в 3.6Кб! Пусть слабоумные ардуинщики поучатся... чему там можно поучиться с этого кода?
Так с бирюлика, небось, ещё гриф секретности не снят...
Про полуось и НетВарь наверное помните ещё ;-)... ностальгия блин!
это когда на пенсии, а по молодости ничего 3,6 килобайта машинного кода и ни одной ошибки
То что они ещё никак себя не проявили, не значит что их нет.)
их там нет, писалось на ассемблере с абсолютным пониманием до байта, что это такое и зачем оно нужно, если бы были за десяток лет эксплуатации вылезло...
Умом понимаю, что этого не может быть, но доказать обратное не получилось...
Проверялись все регистры микропроцессора на уровне исполнения каждой машинной команды...
Если что и могло вылезти, то только в контроллере ПДП, работа велась с ним...
Но тут "сын за отца не отвечает"...
PS ради интереса смотрел в кодах BIOS аналогичные функции - реализовано практически один в один на уровне машинных команд...
А чему там коду ломаться? Он как калашников.
Когда зажат жесткими рамками нехватки ресурсов, пересчитываешь биты и экономишь на всём, начинается искусство программирования.
А чему там коду ломаться? Он как калашников.
Когда зажат жесткими рамками нехватки ресурсов, пересчитываешь биты и экономишь на всём, начинается искусство программирования.
Это да, помню мой спор с ведущим в то время (ЦН) программистом САО РАН Алексеевым, о том, что я его IBM выведу из строя (сожгу микросхемы периферии) кодом их 2-х десятков машинных команд и, понадобится мне для этого обычный debug из комплекта DOS, уверял меня, что это не возможно, но спорить побоялся )))
Кстати, он в эпоху ваучеризации возглавлял ЧИФ Альпари, где была развёрнута сеть под нетварью
И да, тут код просили, поинтересуюсь - Вы разработчик программы FDA???
О, да... помню я эти рассказы про вирусы, которые винты заставляют внутре серверов биться в истерике, разшибая всё вокруг вдребезги.
Какие там еще городские легенды не вытащены на белый свет из пронафталиненных сундуков?
О, да... помню я эти рассказы про вирусы, которые винты заставляют внутре серверов биться в истерике, разшибая всё вокруг вдребезги.
Какие там еще городские легенды не вытащены на белый свет из пронафталиненных сундуков?
тогда Вы наверное и безобидный WINCIH помните?
Какие там еще городские легенды не вытащены на белый свет из пронафталиненных сундуков?
Луч, направленный на стенку кинескопа с соответсвующим замыканием и пиро-шоу.
А чему там коду ломаться? Он как калашников.
Когда зажат жесткими рамками нехватки ресурсов, пересчитываешь биты и экономишь на всём, начинается искусство программирования.
Это да, помню мой спор с ведущим в то время (ЦН) программистом САО РАН Алексеевым, о том, что я его IBM выведу из строя (сожгу микросхемы периферии) кодом их 2-х десятков машинных команд и, понадобится мне для этого обычный debug из комплекта DOS, уверял меня, что это не возможно, но спорить побоялся )))
Кстати, он в эпоху ваучеризации возглавлял ЧИФ Альпари, где была развёрнута сеть под нетварью
И да, тут код просили, поинтересуюсь - Вы разработчик программы FDA???
тогда Вы наверное и безобидный WINCIH помните?
Я и OneHalf помню - что с того? Уверяю вас, что это не самая страшная угроза - вот хрупкие женщины, которые успешно втыкали LPT-кабель, предварительно его перевернув или они же, продавливавшие пальцем внутрь кнопку "Stop" на матричных эпсонах... Они были самым страшным бедствием. От всяких там дископтимизаторов, запущенных юзером, потом дернувшим за выключалку тоже натерпелся. Всё пытаюсь вспомнить название тулзы, которая на 286-х поднимала разделы, но не получается. Нечасто приходилось.
А вирусы... Бэкапы никто не отменял - и сейчас можно от шифровальщика хапнуть по полной программе.
Прогоревших же наскрозь матплат я с тридцаток и пятидесяток [IBM Model 30, 50] не видел. С XT особо дела не имел.
Я и OneHalf помню - что с того? Уверяю вас, что это не самая страшная угроза - вот хрупкие женщины, которые успешно втыкали LPT-кабель, предварительно его перевернув или они же, продавливавшие пальцем внутрь кнопку "Stop" на матричных эпсонах... Они были самым страшным бедствием.
;))))
ОФФТОП: просто анекдот в тему этого поста.
На испытаниях в школу милиции был проведен тест интеллекта:
Нужно было быстро расставить предметы, круглые, квадратные и треугольные по соответствующим отверстиям.
Кандидаты разделились на две, примерно равные группы:
- совершенно тупые,
- очень сильные!
Если вам всегда удается вставить штекер УСБ с первой попытки - вы или очень везучий, или просто сильный...
Ничего себе вы полемику развели! :)
А я всего лишь хотел узнать как две переменные разного типа в одной функции обработать. :) Я конечно не программист поэтому и вопрос возможно для некоторых показался дурацким, особенно когда я упамянул про глобальные переменные. Но это была ирония.
А по поводу сильных. Как то у меня один знакомый лет 10 назад переезжал. Ну и при переезде у него в компьютере выпал шлейф из жесткого диска. Я ему по телефону обяснил, что шлейф легко вставляется. Не обязательно компьютерщика вызывать на дом. Там есть ключ и ошибиться просто невозможно... Знакомый был слесарем и оказался сильным. :)
Если вам всегда удается вставить штекер УСБ с первой попытки - вы или очень везучий, или просто сильный...
CIH уложил у нас в ауле не одну сотню компьютеров, так что пришлось выгребать все свои запасы флэшек