2013-05-27 4 views
3

Таким образом, в этом еще один старой огромных C++ кодового Я пятнистость этого стиля довольно часто:Причины объявления функции непосредственно перед определением?

// ... 

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

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

+4

Strange codebase. – juanchopanza

+0

Ну, это традиционно-старый, с остатками предварительно стандартного C все еще там, поэтому я вообще пытаюсь объяснить все возможные наследственные причины. Но все же этот случай кажется мне слишком странным для меня. – ulidtko

+0

Разве это не какая-то питонская афера? – hetepeperfan

ответ

5

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

компиляторов
#ifdef PROTOTYPES 
void FooBar_Eggs(int spam); 
#endif 
FooBar_Eggs(spam) 
    int spam; 
{ 
    ...; 
} 

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

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

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

0

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

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