все. В настоящее время я работаю со старой установленной базой кода для нового проекта, который в основном недокументирован (т.е. в среднем по 1 однострочному комментарию на файл). Я просто столкнулся с чем-то, чего раньше не видел, и не совсем уверен, как его интерпретировать.
Во-первых, они определяют тип функции и функцию в заголовочном файле (.h) в форме:
typedef void (*SOME_FUNCTION)(void *data, EXECUTION_CONTEXT *ec);
void add_function(SOME_FUNCTION aFunction, void *data);
В основном исходном файле (.c) определена функция:
void add_function(void (*f)(void *data), void *data)
{
(Some code here)
}
Так, хорошо, есть указатель на функцию ... но что, черт возьми, случилось со вторым аргументом, ec? Зачем кому-то использовать такой дизайн кода? Для справки, когда используется функция add_function, она используется в такой форме:
void passedFunction(void *data, EXECUTION_CONTEXT *ec)
{
(Stuff the function does.)
}
void CallingFunction()
{
data = (some data stuff);
add_function((SOME_FUNCTION)passedFunction, data);
}
Итак, как вы можете видеть, переданные функции используют правильную форму, которая соответствует исходной сигнатуре аргумента SOME_FUNCTION, но определение для аргументов add_function является коротким на один аргумент.