LINUX.ORG.RU

Сообщения fopen

 

Новый дизайн сайта FFmpeg

Сайт FFmpeg обрел новый вид. Цель изменений - еще большее меню и удобная навигация.

Первое впечатление от нового вида сайта было: «Оу! Я попал на „рыбака“!?» Он темный!. И «современный» - на главной большая кнопка «загрузить бесплатно без смс», везде гламурные монохромные иконы (и батоны) с кругленькими углами, ну и просто HTML5.нольненько.

fopen
()

Стиль switch - case

Увидел в http://www.linux.org.ru/forum/development/10302494 такой стиль:

    switch (event.type) {
        case SDL_QUIT: {
	    quit = 1;
        } break;
    }
Вопрос ко всем и к Bizun в частности.

В чем физический смысл такого «{...} break;»?

Я в этом вижу только яростную ненависть к goto. Господа, кто еще в мире пишет в таком стиле?

В каких open source проектах используют такой стиль программирования?

 ,

fopen
()

Десериализация сырых данных

Надо мне сохранить некие данные, а позже прочитать их той же программой.

struct data *data;
write (f, data, size_of_data);
...
read (f, data, size_of_data);
Сберег природу.

Если кто-то не знает, что так делать нельзя, сообщаю - так делать нельзя. Если кто-то захочет сообщить в этой теме, что так делать нельзя, то не надо - это оффтоп, заводите свои темы.

Я хочу поговорить, как так сделать!

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

current = meta_current ();
write (f, current, size_of_meta (current));
...
meta = meta_read (f);
read (f, data, size_of_data (current));
if (!meta_eq (meta, current)) meta_decode (meta, data);

Что нужно предусмотреть в этом случае?

  • указатели относительные
  • порядок байт
  • размер элементарных типов данных
  • смещение всех элементов структуры
  • как узнать определить два предыдущих пункта не компилируя и не запуская тест
  • текстовое описание структуры или его хэш

Что еще?

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

Магией в meta_decode и вопросом, кто будет писать эту функцию можно пренебречь.

 

fopen
()

Проверка типов параметров makecontext

Запутавшись в обратных вызовах, приобщился я к новой религии - Сопрограммы! Но вот осталась одна досадная мелочь, мешающая ощутить счастье в полной мере: контроль типов параметров makecontext. В примере ниже параметр «a» передается с ошибкой. Как сделать, чтобы компилятор об этом сообщил?

$ cat makecontext.c

#include <stdio.h>
#include <ucontext.h>

void foo (const char *f, int a, int *ret)
{
    *ret = printf (f, a);
}

void test (void)
{
    unsigned int a = 10;
    int *ret;
    ucontext_t c;

    makecontext (&c, foo, 3, "foo %d", a, &ret);
}

$ gcc -c -Wall makecontext.c

makecontext.c: In function ‘test’:
makecontext.c:15: warning: passing argument 2 of ‘makecontext’ from incompatible pointer type
/usr/include/ucontext.h:48: note: expected ‘void (*)(void)’ but argument is of type ‘void (*)(const char *, int,  int *)’

Ну, и, пятница, же... В каких проектах используются сопрограммы? putty, samba, ещё? Какие субъективные впечатления и объективные результаты от использования сопрограмм?

 , makecontext,

fopen
()

RSS подписка на новые темы