2013-09-14 1 views
0

В моем проекте у меня есть файл заголовка common.h, который включает в себя множество заголовков в нем. Некоторые из файлов включают Common.h и некоторые другие заголовки, которые уже присутствуют в Common. h So На этапе предварительной обработки многие функции получают прототипы дважды (один раз из заголовка «Включено» и другие из Gui.h). Мне было интересно, так это приведет к любой проблеме в долгосрочной перспективе.Будет объявлять функцию генерировать любые проблемы в коде

Пожалуйста suggest..Thanks заранее ..

+2

Если они получают прототип дважды для каждой единицы перевода, то кто-то забыли свои защитные ограждения. – WhozCraig

+2

'#ifndef A'' #define A'' # endif' или '#pragma once' – Chemistpp

ответ

4

Заголовки должны иметь include guards так, что они обрабатываются только один раз:

#ifndef SOME_UNIQUE_STRING 
#define SOME_UNIQUE_STRING 

// Everything else here 

#endif 

Под «Все» я имею в виду «все», начиная с вашей #include если они есть.

SOME_UNIQUE_STRING может быть именем модуля, если он вряд ли совпадает с другим, определяет где-то еще.

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

+0

Спасибо за совет. Это действительно помогает .. – Adi

+0

Но мне было интересно, есть ли какой-нибудь вред в прототипировании дважды ..? – Adi

+0

Я не могу себе представить, как в нем может быть что-то * хорошо *) И да, это может вызвать проблемы - самое вопиющее существо, которое невозможно скомпилировать из-за ошибки переопределения. – delicateLatticeworkFever

0

Как предложил Chemistpp,
#pragma once
это хороший вариант, чтобы попробовать, хотя это не является стандартной.
Ознакомьтесь с преимуществами и недостатками, перечисленными в ссылке.

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