Страница 175 из 386
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб дек 21, 2013 09:21:58
WiseLord
Да, но результат такого рода будет только один и того типа, которым объявлена функция, и не затронет аргументы в скобках.
(строго говоря, возвращаемое функцией значение по сути тоже является её аргументом, просто записанным чуть иначе для удобного восприятия. Просто в математике под функцией понимается зависимость некоторой величины от одного-нескольких аргументов, вот и в C реализовали такую штуку как тип функции.)
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб дек 21, 2013 13:59:00
YS
Язык С++, ATMEL Studio 6, ATmega32
Ох. Ну почему все хронически путают C и C++?
Mika, пока Вы пытаетесь писать на самом обычном ANSI C.
C++ - это, чтобы понятно, классы, шаблоны, наследование и еще куча умных слов. Вы же всего-то пытаетесь побороть передачу аргументов.
Так, до меня все уже написали, но я кратенько резюмирую. Без объяснений, ибо все уже было объяснено.
0. Функция всегда возвращает только
одно значение.
1. При простом вызове в функцию передаются
копии аргументов, которые уничтожатся после вызова.
Код: Выделить всё
int foo(int a, int b, int c)
{
a++;
b--;
c+=2;
return (a + b + c);
}
void main(void)
{
int x,y,z,g;
x=1;
y=2;
z=3;
g=foo(x,y,z);
/*
Тут имеем:
x==1, y==2, z==3
g==8.
*/
}
2. Если передавать в функцию указатели на переменные, то действия будут производиться над самими переменными.
Код: Выделить всё
int bar(int *a, int *b, int *c)
{
(*a)++;
(*b)--;
(*c)+=2;
return ((*a) + (*b) + (*c)); //Операция разыменования имеет наивысший приоритет, но не стесняйтесь расставлять скобки. Хуже не будет.
}
void main(void)
{
int x,y,z,g;
x=1;
y=2;
z=3;
g=bar(&x,&y,&z);
/*
Тут имеем:
x==2, y==1, z==5
g==8.
*/
}
3. Когда передается 100500 переменных, объединенных общей идеей, удобно пользоваться структурами.
Код: Выделить всё
typedef struct {
int a;
int b;
int c;
} my_struct;
void foo2(my_struct *st)
{
st->a++;
st->b--;
st->c+=2;
}
void main(void)
{
my_struct stc;
stc.a=1;
stc.b=2;
stc.c=3;
foo2(&stc);
/*
Тут имеем
stc.a==2, stc.b==1, stc.c==5
*/
}
4. Глобальные переменные - тоже вариант. Особенно в случае с прерываниями и переменными статуса. Но их надо использовать с умом. Куча глобальных переменных, заведенных без необходимости, усложняет жизнь.
Код: Выделить всё
int a,b,c;
int bar2(void)
{
a++;
b--;
c+=2;
return (a + b + c)
}
void main(void)
{
int g;
a=1;
b=2;
c=3;
g=bar2();
/*
Тут имеем
a==2, b==1, c==5
g==8.
*/
}
Такие дела.
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб дек 21, 2013 15:44:23
Мikа
Парни, ещё раз огромное спасибо! Свою задачу я на данный момент я поборол (делал что-то вроде часов шахматистов). Но код выглядит очень некрасиво, это понятно даже мне

То, что вы написали, я конспектирую

Но передачу в функцию адресов на переменные я вчера пробовал и работать не стало. Щас у меня нет возможности попрограммировать МК, который стоит на плате с LSD дисплеем, на который было бы удобно выводить результаты. А на след неделе напишу чистую программку, в которой будет только исследуемая (ну в плане моих экспериментов

) функция и вывод полученных значений на дисплей. Надеюсь, что в следующем посте будут не вопросы, а ответы

Спасибо!
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб дек 21, 2013 19:17:38
YS
попрограммировать МК, который стоит на плате с LSD дисплеем
Вы там c
LSD аккуратнее, не увлекайтесь.

Re: Вопросы по С/С++ (СИ)
Добавлено: Сб дек 21, 2013 22:55:42
Мikа
Твою мать, вот это надо было так опечататься на форуме технарей

Re: Вопросы по С/С++ (СИ)
Добавлено: Сб дек 21, 2013 23:06:34
unalex
частенько такие казусы вижу, аж бррр
думаю если знать как расшифровывается аббревиатура (Liquid Crystal Display), каких ошибок ну никак не получится сделать
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб дек 21, 2013 23:08:01
Мikа
Да я знаю, в том-то и дело

Просто тупанул

Мне когда
YS указал на это, я сначала не понял, в чём подвох, и начал проверять написанное на правильность

Re: Вопросы по С/С++ (СИ)
Добавлено: Сб дек 21, 2013 23:38:09
unalex
YS писал(а):0. Функция всегда возвращает только одно значение.
я бы так не говорил - структура, перечисление, массив...
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб дек 21, 2013 23:45:19
unalex
YS писал(а):1. При простом вызове в функцию передаются копии аргументов, которые уничтожатся после вызова.
после вызова(во время выполнения функции) они вполне себе живы и существуют внутри этой функции
имелось ввиду после ВОЗВРАТА(выхода) из вызываемой функции
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб дек 21, 2013 23:48:37
unalex
YS писал(а):3. Когда передается 100500 переменных, объединенных общей идеей, удобно пользоваться структурами.
еще есть массивы, перечисления...
все зависит от конкретного случая и типа переменных
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс дек 22, 2013 10:36:26
blackx
unalex, ну вы прямо по всем пунктам придрались. YS все правильно написал. Enum-ы для передачи данных группой не получится использовать. А массив для этого - какое-то извращение
ЗЫ. Не создавайте несколько сообщений подряд. Используйте уникальную возможность отредактировать свое последнее сообщение для добавления контента.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс дек 22, 2013 14:42:18
YS
я бы так не говорил - структура, перечисление, массив...
Э-э-э, все это возвращается/изменяется по указателю. Так что, по факту, значение одно. Вернуть больше одного в конструкции return - технически невозможно (в Си, разумеется; в Lua, например, можно

).
они вполне себе живы и существуют внутри этой функции
имелось ввиду после ВОЗВРАТА
Это да, они существуют в стеке и пропадают после
завершения вызова функции. Ну и, конечно, строго говоря они не уничтожаются немедленно и целенаправленно, просто стек затирается новыми данными по мере использования...

Re: Вопросы по С/С++ (СИ)
Добавлено: Вс дек 22, 2013 16:21:58
Chip115
Всем привет!
Надеюсь не за пинаете )) Тут пытаюсь учиться прогать на C# и столкнулся с проблемой. В общем создавать формы в дизайнере не для меня и потому пытаюсь научиться создавать форму " в ручную". Так вопрос в том, а как в одной форме разместить массив кнопок и текст_бокс? Класс матрицы кнопок CellButtons сделать наследником главной формы MyForm?
Вот такая у меня структура кода:
Код: Выделить всё
public static void Main()
{
MyForm Calc = new MyForm();
Application.Run(Calc);
}
class MyForm : Form
{
public MyForm()
{
TextBox txtBox = new TextBox();
txtBox.Parent = this;
}
}
class CellButtons : MyForm
{
// куча быдлокодинга (размещаем кнопки матрицей 3*3)
}
При такой структуре в проекте только текст_бокс.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс дек 22, 2013 16:56:21
unalex
blackx писал(а):А массив для этого - какое-то извращение
это почему же?
типичный случай - массив данных, требующий сортировки
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс дек 22, 2013 17:03:00
oleg110592
Chip115 писал(а): Тут пытаюсь учиться прогать на C# и столкнулся с проблемой. В общем создавать формы в дизайнере не для меня и потому пытаюсь научиться создавать форму " в ручную"
наверное координаты и пр. для кнопки ввести надо, дизайнер так делает:
Код: Выделить всё
this.button1 = new System.Windows.Forms.Button();
..........
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(304, 191);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Старт";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
имхо в дизайнере форм все делать гораздо проще
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс дек 22, 2013 17:15:27
Chip115
Все есть )) Просто тут код не стал приводить. Координаты и прочее, что касается кнопок формируются в методе CellButtons. По отдельности работают оба метода: текс_бокс и CellButtons. А вот запихнуть их в одно окно ума не хватает

Re: Вопросы по С/С++ (СИ)
Добавлено: Вс дек 22, 2013 19:33:20
menzoda
YS писал(а):Э-э-э, все это возвращается/изменяется по указателю.
Почему это по указателю? Можно спокойно вернуть ту же структуру по значению. Передана она в общем случае будет через стек. Поэтому, если под "одним" возвращаемым значением подразумевается одно машинное слово, то это не верно: можно вернуть данные любого размера. Если же под этим подразумевается одно "логическое значение" , то действительно, две отдельные структуры не возвратить, придется их объединять в одну.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс дек 22, 2013 19:41:31
menzoda
Chip115
Конечно, из твоего обрезка кода ничего непонятно, но у формы есть свойство Controls, которое представляет собой коллекцию дочерних объектов. Добавляешь туда свои элементы управления.
Re: Вопросы по С/С++ (СИ)
Добавлено: Пн дек 23, 2013 02:48:56
YS
Если же под этим подразумевается одно "логическое значение" , то действительно, две отдельные структуры не возвратить, придется их объединять в одну.
Именно, две структуры уже никак. Только передавать в функцию указатели на них. Через return - никак две не возвратить. Опять же, в C. В том же Lua - вполне можно.

Re: Вопросы по С/С++ (СИ)
Добавлено: Пн дек 23, 2013 16:10:46
dzrkot
у меня тупой вопрос =|
скоро истечёт 30 дневная ознакомительная версия IAR (2дня), сегодня её удалил, скачал софф сайта, почистил реестр claenerom(думал спасёт) поставил обратно, видит старую лицензию, новую 30дневную соответветственно незарегистрировать и не поставить...как быть?
Пиратки нельзя, ибо убьют при проверке..