LINUX.ORG.RU

ansi C и «классы»


0

0

Учусь работать с библиотекой Allegro, и по ходу дела возникла такая трудность: потребовалось использовать квадратную матрицу:
int tbl[N][M];
дальше по ходу работы, потребовалось эту матрицу передавать в качестве параметра в различные функции, для этого в объявлениях функций было необходимо писать следующее:
void fill(int tbl[N][M])
(по другому передать не получилось)

Теперь сам вопрос: есть ли какая-нибудь библиотека (не С++), позволяющая работать со списками, типа CList, TList и т.д., а также с матрицами произвольного размера.
Все это я могу написать и сам, но не хочется изобретать велосипед с квадратными колесами :)

Если таких библиотек для чистого C нет, тогда порекомендуйте для С++ :(


>void fill(int tbl[N][M])

>(по другому передать не получилось) 

Лучше так:

void fill(int *tbl, size_t n, size_t m);

Или можно чудесным образом имитировать ООП на C:

struct matrix_struct {
  int *data;
  size_t n;
  size_t m;
};

typedef struct matrix_struct matrix;

void init_matrix(matrix *tbl);

void fill_matrix(matrix *tbl);

P.S. Кстати, Glib может помочь. http://en.wikipedia.org/wiki/Glib

Davidov ★★★★
()

напоминаю в C (не C++) разрешены динамические массивы в параметрах,
код

void fill(int N, int M, int tbl[N][M]) {
int xxx[M][N], zzz[N][M];
....

вполне корректен.

Это уже обсуждалось.

io ★★
()

> Теперь сам вопрос: есть ли какая-нибудь библиотека (не С++), позволяющая работать со списками, типа CList, TList и т.д.,

#include <sys/queue.h>

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

а разве <sys/*.h> это не системноспецифичные/непортабельные вещи? а автор вроде про ansi c спрашивает...

cobold ★★★★★
()
Ответ на: комментарий от cobold

> а разве <sys/*.h> это не системноспецифичные/непортабельные вещи? а автор вроде про ansi c спрашивает...

я так понял что он спрашивает библиотеку. Вернее это даже не библиотека а набор макросов

Да,конечно этой sys/queue.h нет в стандарте. он есть в линуксе, есть в бсд (откуда и взят). Можно просто импортировать к себе в проект, благо все содержится в одном файле под бсд лицензией.

dilmah ★★★★★
()
Ответ на: комментарий от io

> напоминаю в C (не C++) разрешены динамические массивы в параметрах,

В C >= C99. Попробуй -std=c89 -pedantic

Плюс ко всему, Использовать VLA -- опасно. Закончился stack -- программа тихо вылетела. С malloc'ом проще -- вернулся NULL? Ждем, пробуем еще.

> Это уже обсуждалось.

Где?

logIN
()

Конечно в glib. А вообще, что, так сложно самому написать? Этож пять минут.

xTERM ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.