[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: а кто C хорошо знает?



> 16	  union
> 17	  {
> 18	    struct base body;
> 19	    int str[sizeof(struct base)+c];
> 20	  } object;

тут может быть просто struct и тогда не надо будет sizeof(struct base)

вопрос как это в макрос засунть, чтобы потом функции которые хотят
указатель на struct base с этим работать?

#define SOMETING(__name, __size)            \
    struct {                                \
        struct something s;                 \
        unsigned items[__size];             \
    } __attribute__((packed)) __name = {    \
        .s = {                              \
            .size = __size,                 \
        }                                   \
    }

Делает почти все что нужно:


int some_func(struct something *);
static SOMETING(variable, 10);

void foo(void) {

    ... 

    some_func((struct something *)&variable);

    ...
}

То есть пользоваться можно, но надо приводить типы.

А хорошо бы сделать так чтобы типы приводить тоже не надо было, но
результат был такой же. 

Как вариант можно сделать прототип у функции some_func:

int some_func(void *);

но это даже хуже чем приведение типа при вызове имхо
-- 

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment: signature.asc
Description: Digital signature


Reply to: