2012-01-04 2 views
3

По умолчанию затмения создает включать/стражник заголовка следующий образом:Затмение GUID включают охрану

Например для test.h

#ifndef TEST_H_ 
#define TEST_H_ 
... 

мне интересно, если это соглашение может создать коллизии, когда у нас есть файлы с одинаковыми именами под различные папки (пространства имен) в рамках одного и того же проекта. Если я не пропущу что-то, это будет проблемой, когда у нас будет такая ситуация. Мне также интересно, что лучше всего, когда именование включает в себя охранников. Я видел примеры кода, в которых используется именование на основе оснований. Мне интересно, поддерживает ли eclipse это из коробки, если никто не может предложить плагин для этого.

+0

http://stackoverflow.com/questions/5359324/eclipses-auto-generated-h-file-guards Уже обсуждалось ранее. –

+2

@VinayJain, что вопрос задает вопрос о завершении _, а не о столкновении имен. – Mark

+0

не может согласиться с еще одним номером –

ответ

-1

Имя должно быть уникальным для всех файлов заголовков. XXXX_H_ является обычным явлением, как и _XXXX_H. GUID редко используются и наименее подвержены коллизии.

+1

. Какое решение вы предлагаете, поскольку файлы могут иметь одинаковые имена под разными пространствами имен? Я пошел по шаблону шаблонов кода, это выглядит многообещающе для меня, особенно если я могу найти способ генерировать guid из сценария шаблона кода. –

+0

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

0

Если вы используете достаточно современный компилятор, вы можете заменить эти защитные устройства более элегантной директивой #pragma один раз.

Посмотрите на такие вещи, как Boost files, у них есть некоторые соглашения для защитников заголовков.

+1

, поскольку это нестандартная функция, которая сделает код более зависимым от компилятора, менее портативным. Поэтому я не могу использовать #pragma один раз. –

0

Если имя файла может отображаться в нескольких папках или пространствах имен, вы, конечно же, можете включить пространство имен и в защитные блоки включения.

В любом случае сочетание пространства имен и имени класса должно быть достаточно уникальным в вашем проекте.

В MyNamespace/MyClass.h

#if !defined MYNAMESPACE_MYCLASS_H_INCLUDED 
#define MYNAMESPACE_MYCLASS_H_INCLUDED 
... 
#endif 
+0

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

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