автоматически сгенерированные Ehipse .h file guard - PullRequest
2 голосов
/ 19 марта 2011

В eclipse, когда создается класс c ++, файл .h автоматически генерируется с guard XXXX_H_. В моем ограниченном, небольшом опыте охранник всегда будет в форме XXXX_H без следа _.

Итак, мне просто любопытно и интересно, почему _ там.

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 19 марта 2011

Трейлинг _ может быть добавлен во избежание конфликта с пользовательскими идентификаторами. Например, у вас может быть заголовочный файл с именем get.h, и в то же время вы можете иметь собственный макрос (или переменную, или функцию) с именем GET_H. Таким образом, использование GET_H для включения защиты в get.h может легко привести к проблемам.

Стандартные заголовочные файлы библиотеки могут использовать начальный _ для именования своих внутренних макросов с той же целью - чтобы избежать конфликта имен с определенными пользователем идентификаторами. По этой причине спецификация языка явно запрещает определенные пользователем идентификаторы, которые начинаются с _ и заглавной буквы. И по той же причине, ведущий _ не может быть использован в именах включенных охранников.

Итак, Eclipse решил использовать трейлинг _ для той же цели. Он обеспечивает разумный уровень защиты от коллизий имен и не нарушает требования спецификации языка.

3 голосов
/ 19 марта 2011

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

Чтобы изменить шаблон заголовка в Eclipse CDT, перейдите в «Окно / Настройки / C ++ / Шаблоны кода / Файлы / Файл заголовка C ++ / Шаблон заголовка C ++ по умолчанию» и поместите туда

${filecomment}

#pragma once

${typecomment}
${declarations}

После этого ваши новые h-файлы начнутся примерно так:

/*
 * FileServer.h
 *
 *  Created on: Feb 26, 2011
 *      Author: krit
 */

#pragma once
2 голосов
/ 19 марта 2011

Неважно, как называется защита включения, если она уникальна для всех заголовочных файлов.

XXXX_H_ является обычным, как и XXXX_H.Иногда используются GUID.

1 голос
/ 19 марта 2011

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

...