Dmitry E. Oboukhov -> debian-russian@lists.debian.org @ Mon, 8 Oct 2012 12:41:05 +0400:
DEO> имеется некая структурка DEO> struct something { DEO> ... DEO> unsigned count; DEO> unsigned element[0]; DEO> }; DEO> то есть в поле count сказано сколько элементов будет после структурки. DEO> ну и обращение к ним идет так: DEO> for (i = 0; i < s->count; i++) { DEO> s->elements[i] = i; DEO> } DEO> теперь когда мы это хотим саллоцировать, то пишем такой аллокатор DEO> struct something * some_alloc(unsigned size) { DEO> return malloc(sizeof(struct something) + sizeof(unsigned) * size); DEO> } DEO> а вот если появилась необходимость саллоцировать такой объект DEO> статически, как быть? DEO> хочется макрос DEO> #define SOMETHING(name, size) ... DEO> чтобы пользователь мог сказать DEO> void foo(void) { DEO> static SOMETHING(name, 5); DEO> SOMETHING(name2, 10); DEO> } DEO> и получить саллоцированный на стадии компиляции (или в стеке) такой объект? Так вот сходу не поручусь, но я бы делал что-то типа танцев вокруг union { struct something #name; char[sizeof(struct something) + sizeof(unsigned)*size]; }; Но там потанцевать вокруг имен придется, чтобы получить-таки на выходе интересующий тебя name. На ум приходит фокус с errno, который макрос, разворачивающийся во что-то типа *(per_thread_errno_ptr()). Позаниматься построением работающего решения не готов. И слово static, скорее всего, придется запихивать внутрь макроса. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/87obkdtetj....@wizzle.ran.pp.ru