Почтовый клиент Liza
-
Нет, упрощает. Там 2 объекта "список". У них одинаковые свойства и методы - зачем мне дублировать код, если можно сделать универсально и притом всю работу со списком вынести в отдельный файл.Из хаоса в космос
Неужели Си не поддержвает такой код?
Code: Select all
struct llist
{
int x,y,w,h,min_h;
int line_h;
int count,visible,first;
int current;
void SetSizes(int xx, yy, ww, hh, min_hh, line_hh);
int MouseScroll(dword scroll_state);
};
void llist::SetSizes(int xx, yy, ww, hh, min_hh, line_hh)
{
x = xx;
y = yy;
w = ww;
h = hh;
min_h = min_hh;
line_h = line_hh;
}
int llist::MouseScroll(dword scroll_state)
{
if (scroll_state == 65535)
{
if (first == 0) return 0;
if (first > 3) first -= 2; else first=0;
return 1;
}
if (scroll_state == 1)
{
if (visible+first+3 >= count) first = count - visible; else first+=2;
return 1;
}
return 0;
}
Из хаоса в космос
So, when will we see the first glimpse of this magnificient creature?
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
When it will be done.
Из хаоса в космос
Нет, не поддерживает. Структуры, содержащие функции, не допускаются, и этр, я считаю, правильно.
Структуры могут содержать указатели на функции. Такой первобытный ООП.
Поддерживает, но в структуре должен быть указатель (тип *) перед объявлением прототипа функции(процедуры).
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
Указатели - это указатели. А реально функции в структурах - это немного другое.
SoUrcerer
Реализуется компилятором как же указатели.
Реализуется компилятором как же указатели.
Столкнулся с проблемой создания динамических массивов и разработка остановилась.
Из хаоса в космос
Есть код, но он не работает как надо.
Code: Select all
struct line_element
{
char type;
char header[256];
int size;
}
dword db;
dword GetCurrentElement(int el_N)
{
return sizeof(line_element)*el_N + #db;
}
void main()
{
db = free(db);
db = malloc( count * sizeof(line_element) );
for (i=0; i < 10; i++)
{
EBX = GetCurrentElement(i);
EBX.line_element.size = i; //мне кажется тут мы забиваем значение в переменную, а не "по адресу" в указателе
}
for (i=0; i < 10; i++)
{
EBX = GetCurrentElement(i);
debugi(EBX.line_element.size); // вывод сплошные нули, а не 0 1 2 3 4...
}
}
Из хаоса в космос
На чём писанно?Leency wrote:Есть код, но он не работает как надо.Code: Select all
struct line_element { char type; char header[256]; int size; } dword db; dword GetCurrentElement(int el_N) { return sizeof(line_element)*el_N + #db; } void main() { db = free(db); db = malloc( count * sizeof(line_element) ); for (i=0; i < 10; i++) { EBX = GetCurrentElement(i); EBX.line_element.size = i; //мне кажется тут мы забиваем значение в переменную, а не "по адресу" в указателе } for (i=0; i < 10; i++) { EBX = GetCurrentElement(i); debugi(EBX.line_element.size); // вывод сплошные нули, а не 0 1 2 3 4... } }
Если, даже
dword GetCurrentElement(int el_N) - возвращает элемент по номеру(в массиве), - то зачем нужно получать
в возврате размер данного элмента + адрес его (массива) базы (#db):
return sizeof(line_element)*el_N + #db;
Тебе нужен указатель на массив элементов - GetCurrentElement(line_element *el_N),
это во-первых, а во-вторых, - у тебя функция возвращает элементы {char type; char header[2]}, а не указатель на:
line_element *Имя_нечто[Некого_размера].
Если не запямятовал.
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
Нет, всё логично.Artyom wrote:то зачем нужно получатьв возврате размер данного элмента + адрес его (массива) базы (#db)
У меня (да и у компилятора) сомнения по поводу строк:
Code: Select all
EBX.line_element.size = i;
Code: Select all
debugi(EBX.line_element.size);
В общем, после
Code: Select all
EBX = GetCurrentElement(i);
Code: Select all
EBX->line_element.size = i;
Слепил тест, при первом нажатии кнопки под KlbrInWin выдаёт:
Attempt to work with uninitialized heap!
при втором работает как предполагалось
с инициализацией heap разбираться лень
Attempt to work with uninitialized heap!
при втором работает как предполагалось
с инициализацией heap разбираться лень
- Attachments
-
-
arr.zip (1.33 KiB)Downloaded 363 times
-
закомментировал
//db = free(db);
работает без сообщений
//db = free(db);
работает без сообщений
Who is online
Users browsing this forum: No registered users and 0 guests