Причины объявления функции непосредственно перед определением?

Так что в этой другой старой огромной кодовой базе C ++ я довольно часто замечаю этот стиль:

// ...

void FooBar::Eggs(int spam);
void FooBar::Eggs(int spam) {
// implementation here
// ...
}

В общем, я понимаю, в чем смысл объявление вперед функция в C ++, однако я не могу найти никакого оправдания для такого рода дублирования. Есть ли причина не устранить это?

3

Решение

Если это кодовая база, предшествующая стандарту C, возможно, этот код изначально выглядел примерно так:

#ifdef PROTOTYPES
void FooBar_Eggs(int spam);
#endif
FooBar_Eggs(spam)
int spam;
{
...;
}

Компиляторы C эпохи 1990-х, даже если бы они поддерживали прототипы, не выводили бы прототип из определения функции «старого стиля» в пользу кода, расположенного ниже в том же файле, так что вы довольно регулярно видели бы такую ​​конструкцию в коде предназначен для компиляции как со стандартными, так и со старыми компиляторами.

Теперь представьте, что в какой-то момент между тем и теперь кто-то механически преобразовал все определения функций старого стиля в определения-прототипы, а кто-то еще механически преобразовал C в C ++, и результат вполне может выглядеть так, как у вас.

Ведущая декларация больше не имеет смысла и может быть безопасно удалена.

5

Другие решения

Я думаю, что это было ненужным. Функция объявлена, пока она определена. (насколько я знаю)

0

По вопросам рекламы [email protected]