У меня есть некоторые встроенные функции ОС, которые мне нужно смоделировать на машине linux. Подход, который мне поручили предпринять, - это перегрузить встроенные функции ОС и обернуть их вокруг потоков POSIX, чтобы машина Linux могла обрабатывать встроенные функции ОС во время модульных тестов и много чего.Указатель функции typedef in c
Встроенная функция ОС, чтобы создать новый поток: OSCreateTask(OStypeTFP functionPointer, OSTypeTcbP taskId, OStypePrio priority)
Мне нужно преобразовать что OStypeTFP
типа в указатель функции ничтожной, что pthread_create
ожидает: (void * (*)(void *)
является то, что компилятор говорит мне, что это ожидает)
Я надеялся создать ЬурейеЕ, что я мог бы использовать его как:
typedef void (*OStypeTFP)(void);
// Function to run task/thread in
void taskFunction(void) { while(1); }
// Overloaded Embedded OS function
void OSCreateTask(OStypeTFP tFP, OStypeTcbP tcbP, OStypePrio prio)
{
pthread_attr_t threadAttrs;
pthread_t thread;
pthread_attr_init(&threadAttributes);
pthread_create(&thread, &threadAttributes, &tFP, NULL);
}
// Creates a task that runs in taskFunction
OSCreateTask (taskFunction, id, prio);
но компилятор жалуется, что functionPointer
имеет тип void (**)(void)
, когда pthread_create ожидает void * (*)(void *)
Нужно ли мне каким-либо образом изменить свой тип typedef, или мне нужно сделать некоторое приведение типов? И то и другое?
Функция должна принимать '' недействительным * параметр и возвращать 'аннулируются *' – imreal
Вы должны читать далее о ['pthread_create'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_create.html) и, возможно, о потоках в целом. Так же как указатели на функции и функции распадаются на указатели и то, что делает оператор address с переменной указателя. –
Для «перегрузки» функция (имя) предназначена для предоставления разных функций с тем же именем, но с разными типами аргументов. C не поддерживает это. –