Нечетное определение функции C не K&R

Я столкнулся с некоторым старым кодом, написанным на старом не-ANSI C давным-давно, и я пытаюсь понять определение функции.

Я могу понять конечный результат, но я хочу полностью понять стиль кода.

Использовать:

ok = ElementFn(lifestyleRollupContribution)( gr, nr, cnt, id, prj, k, f, rnd, base );

Определение функции:

Private Logical ElementFn(lifestyleRollupContribution)
(
    Real*   gross,
    Real*   net,
    Const Real* contribution,
    Const Date* investment,
    Const Date* projection,
    Const PCode* key,
    Const PCode* fund,
    Const PCode* inv_prd_round,
    Const Date* inv_prd_base_date
)
{
// stuff
}

Итак, в этом примере я вижу функцию под названием ElementFN, которая возвращает «Логический» и имеет ряд параметров. Чего я не понимаю, так это того, что (lifestyleRollupContribution) он используется только дважды, где вы его видите.. но что он делает? что это означает - ничего не узнаю. Я видел ссылки на объявление функций в стиле Кернигана и Ричи, но это не похоже на то?


person Jon H    schedule 21.11.2013    source источник
comment
Проверьте, является ли ElementFn макросом.   -  person DCoder    schedule 21.11.2013
comment
Выполните поиск во всех файлах заголовков для ElementFn.   -  person Some programmer dude    schedule 21.11.2013


Ответы (1)


В современном C это может быть только макрос. Пример:

#define ElementFn(name) function_ ## name
#define Private 
typedef float Logical;
typedef float Real;

Private Logical ElementFn(lifestyleRollupContribution)(
    Real   gross,
    Real   net
) {
    return 2.0f;
}

int main(void) {
    printf("%f", ElementFn(lifestyleRollupContribution)(3.05f, 42.0f));
    return 0;
}
person Alex Watson    schedule 21.11.2013
comment
Я думаю, вы можете быть правы, я нашел этот '#define ElementFn(x) EF##x', но это неприятный код! Я уверен, что это имело смысл, когда это было написано несколько десятилетий назад! Я бы никогда не подумал о макросе; в основном потому, что у меня никогда не было причин их использовать! а в этом (если он есть) около 200 строк кода!!! - person Jon H; 22.11.2013
comment
Это макрос, но я до сих пор не знаю, как его использовать в полной мере. Спасибо, что указали мне правильное направление. - person Jon H; 22.11.2013
comment
Поддерживает ли ваш компилятор расширение макросов? На мой взгляд, это очень полезно. Проверьте следующий вопрос для получения подробной информации в gcc: /увидев-расширенные-c-макросы - person Lazureus; 29.06.2014