Alla_student 0 9 октября, 2015 Опубликовано 9 октября, 2015 · Жалоба Подскажите пожалуйста - Возможен, ли, вызов разных функций с разными праметрами через указатель? Язык СИ (Keil)? Если да, то как лучше реализовать (желательно с примером). Я хотела вызывать различные функции через функцию указатель и различными параметрами, которые могут меняться (время события, состояние и т.д.) и передавать вызываемой функции. Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 9 октября, 2015 Опубликовано 9 октября, 2015 · Жалоба Можно, но через приведение типа. Пример: #include <stdio.h> void func1() { printf("func1\n"); } int func2(int pVal) { printf("func2(%i)\n", pVal); return pVal; } int main() { typedef void(*func1_type)(); typedef int(*func2_type)(int); void* func_ptr; printf("call1\n"); func_ptr = (void*)func1; ((func1_type)func_ptr)(); printf("call2\n"); func_ptr = (void*)func2; ((func2_type)func_ptr)(3); printf("end\n"); return 0; } Вывод call1 func1 call2 func2(3) end ------------------- а если вам надо во время выполнения определять функцию какого типа вызвать, то лучше перейти на C++, там есть средства для этого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CrimsonPig 0 10 октября, 2015 Опубликовано 10 октября, 2015 · Жалоба Возможен, ли, вызов разных функций с разными праметрами через указатель? Если да, то как лучше реализовать (желательно с примером). Я хотела вызывать различные функции через функцию указатель и различными параметрами, которые могут меняться (время события, состояние и т.д.) и передавать вызываемой функции. Слишком общий вопрос. На С можно сделать вообще все, включая аналоги виртуальных функций и DCOM :) Вопрос в цене реализации и понятии, нужно ли оно вообще. "Различные параметры" - что означает в данном контексте ? Одинаковый набор различных значений ? Если так, то сигнатуры функций будут одними и тееми же. Вызывайте их через указатель одного типа и все. Если наборы параметров разные, но похожие, то можно их все запихать в структуру и передавать эту структуру в функции по указателю. В этом случае сигнатуры функций тоже будут одинаковыми.. E.g: struct TParamStruct { uint32 param1; uint32 param3; uint8 param4; const char* pMsg; }; typedef void (TMyFoo*) (TParamStruct*); TMyFoo pFoo1; TMyFoo pFoo2; TParamStruct params1 = {...}; TParamStruct params2 = {...}; pFoo1(params1); pFoo2(params1); pFoo1(params2); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alla_student 0 13 октября, 2015 Опубликовано 13 октября, 2015 · Жалоба ... Если наборы параметров разные, но похожие, то можно их все запихать в структуру и передавать эту структуру в функции по указателю. В этом случае сигнатуры функций тоже будут одинаковыми.. Спасибо, вызов одного из полей структуры - парметров в зависимости от функции, подходящий вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 октября, 2015 Опубликовано 13 октября, 2015 · Жалоба Спасибо, вызов одного из полей структуры - парметров в зависимости от функции, подходящий вариант. Только это не поля, а члены. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 14 ноября, 2015 Опубликовано 14 ноября, 2015 · Жалоба не поля, а члены.ну да, members )))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться