在提出问题之前,我通常希望有一个更好的开端,但我有点不知道如何开始这个。
我的任务是在C中创建一个小型测试框架,严格使用大量不同的typedef struct
s。
假设我有一个返回mytype_t
的函数:
typedef struct mytype {
void * data;
} mytype_t;
mytype_t my_type_func(char *p) {
mytype_t q;
q->data = p;
return q;
}
现在我想编写一个函数来确保一切正常:
void CUSTOM_ASSERT(void (*test_func)(char*), mytype_t r){
mytype_t p = (*test_func);
if(p->data == r->data){
puts("Test X Passed");
}
来自driver.c
:
int main(void) {
mytype_t t;
t->data = "test";
char *test = "test";
CUSTOM_ASSERT(my_type_func(test), t);
}
现在这对于这一种类型和功能都很好用,但是有超过100 typedef structs
和函数不带10个参数加上一些参数可以是其他typedefs
。这使得使用va_list
有点棘手,因为这些类型没有可变参数宏(我知道)。
最好的方法是什么?我正在尝试这样的事情:
void CUSTOM_ASSERT(void (*test_func)(...), void *should)
但我不清楚函数指针应该能够转换CUSTOM_ASSERT
的第二个参数的返回类型。