Перечислить параметр указателя в C - PullRequest
1 голос
/ 23 ноября 2011

Я пишу некоторые функции тестирования для проекта. Тестовая функция принимает указатель функции, ожидаемое значение и тестовое значение и проверяет их:

int TestIntInIntOut(int (*func)(int val), int expected, int testvalue);

Однако я также тестирую функции, которые могут принимать перечисление в качестве параметра или выходного значения.

Предположим следующее:

typedef enum { Zero, One, Two } MyEnum;

Есть ли способ, которым я могу передать весь enum как тип? Для любого перечисления. Например:

int TestIntInEnumOut(?enum? (*func)(int val), ?enum? expected, int testvalue);

или

int TestEnumInIntOut(int (*func)(?enum? val), int expected, ?enum? testvalue);

(Вроде как то, что допускает дженерик в C #.)

Ответы [ 2 ]

4 голосов
/ 23 ноября 2011

Вы имеете в виду какое-нибудь перечисление, или просто MyEnum?

Если вам нужна только функция для поддержки MyEnum, вы можете сделать:

int TestEnumInIntOut(int (*func)(MyEnum val), int expected, MyEnum testvalue);

В противном случае вы, вероятно, не сможете сделать это в C, с большой безопасностью типов. Но перечисление по сути то же самое, что и int, так что вы можете просто рассматривать их как int типов. Если безопасность типов необходима, рассмотрите возможность предоставления разных целочисленных диапазонов значений для разных типов перечислений.

0 голосов
/ 23 ноября 2011

Не является прямым ответом на ваш вопрос, однако, как вы сказали, что пишете некоторые тестовые функции: вы можете взглянуть на googletest или cppunit - может сэкономить вам немного беда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...