2012-05-26 4 views
0

Пусть следующий фрагмент C код:В чем преимущество определения макроса в следующем фрагменте?

#define SOME_MACRO(m) \ 
    void (*f)(m);   \ 
    unsigned int a;  \ 
    int *self; 

, а затем структуру, которая делает

typedef struct _Str { 
    SOME_MACRO(whatever) 
    char sthg[2]; 
} STR; 

Мой вопрос: какова цель этого проекта выбор? Например, дело не в экономии времени. Есть ли что-то более интересное, чем попытка модульного кода _STR?

ответ

0

SOME_MACRO (m) преобразует в функцию указатель на функцию, возвращающую ничего, что принимает один аргумент типа m, а также беззнаковый int и указатель на int. Я считаю, что причины дизайна такого типа очень специфичны для конкретного случая и не имеют более сложного примера кода, который, как я полагаю, используется для модулизации кода, как вы упомянули.

3

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

+0

Роб, вы говорите о C? –

+0

В нашем случае C++, но та же идея может применяться к C, в зависимости от макроса ... используется ли она в нескольких структурах? –

+0

На самом деле, учитывая, что это C, это может быть своего рода рудиментарный полиморфизм ... например, «я». –

-1

только из кода, который вы указали, я также не могу объяснить, но это кажется простым, так что, я думаю, это просто тестовый макрос нового программиста, потому что значение «SOME_MACRO» = some макрокоды тестов ...

+1

Я думаю, вы пропустили точку; ОП, вероятно, удалил некоторые детали, особенно их работу, но спрашивает о технике в целом. – Ashe