2013-11-21 3 views
0

Я столкнулся с каким-то старым кодом, написанным старым не-ansi C давным-давно, и я пытаюсь найти определение функции.Нечетное определение функции C не K & R

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

Использование:

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), он используется только дважды, где вы его видите ... но что он делает? что это означает - ничего не признаю. Я видел ссылки на объявление функции Kernighan и Ritchie, но, похоже, это не так?

+6

Проверьте, является ли 'ElementFn' макросом. – DCoder

+1

Сделайте поиск всех файлов заголовков для 'ElementFn'. –

ответ

6

В современном 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; 
} 
+0

Я думаю, что вы можете быть правы Я нашел это '#define ElementFn (x) \t EF ## x' это неприятный код! Я уверен, что это имело смысл, когда он писал десятилетия назад! Я бы никогда не подумал о Макро; главным образом потому, что у меня никогда не было причин использовать их! и этот (если есть) имеет около 200 строк кода в нем !!! –

+0

Это макрос, но я до сих пор не знаю, как он используется полностью. Спасибо, что указал мне в правильном направлении. –

+0

Поддерживает ли ваш компилятор расширение макросов? По-моему, это очень полезно. Чтобы узнать подробности в gcc, проверьте следующий вопрос: http://stackoverflow.com/questions/985403/seeing-expanded-c-macros – Lazureus

Смежные вопросы