Эквивалент #region для C ++

84

Что такое C ++-эквивалент #region для C ++, чтобы я мог вставлять сворачиваемые биты пользовательского кода и облегчить чтение моего кода?

Сэр Якалот
источник
14
Это особенность IDE, а не язык, не так ли?
Björn Pollex
4
@ BjörnPollex, он используется IDE, но не должен конфликтовать с синтаксисом языка, и компилятор также должен его принять.
Дарин Димитров
1
#regionдля C # это допустимый синтаксис и очерчивает область кода. Visual Studio позволяет складывать их как функцию IDE.
Thanatos
10
Вы не можете использовать #region , чтобы сделать код более удобным для чтения, #region делает вам код проще не читать.
jk.
Я предлагаю строковый комментарий, за которым следует оператор блока.
Grault

Ответы:

91

Регион Ключевое слово является IDE специфичны и влияет на рендеринг в Visual Studio. Ближайший эквивалент - #pragma Region, который применим только к Visual Studio.

Пример кода из MSDN

// pragma_directives_region.cpp
#pragma region Region_1
void Test() {}
void Test2() {}
void Test3() {}
#pragma endregion Region_1

int main() {}
Д-р Эндрю Бернетт-Томпсон
источник
если это только для IDE, следует ли мне беспокоиться о компиляции кода #pragma region? Есть ли компилятор C, который это отрицает? Есть ли какие-то последствия? Спасибо
Рамон Диас
Только что проверил с помощью Mingw. Использование gcc -Wall, показывает предупреждения о неизвестных прагмах. Нравится: warning: ignoring #pragma region test [-Wunknown-pragmas]иwarning: ignoring #pragma endregion [-Wunknown-pragmas]
Рамон Диас
28

В дополнение к #pragma region#pragma endregionдля Visual Studio многие IDE поддерживают следующий синтаксис для регионов на любом языке с {}ограничениями и //комментариями:

//{ Region header text.//}

Известные примеры включают Code :: Blocks и FlashDevelop , а также любой другой редактор, использующий компонент редактирования Scintilla , такой как Notepad ++ , Geany , Komodo Edit и многие другие.

Джон Парди
источник
Поддерживает ли VS это?
Дмитрий Нестерук
1
Только что попробовал, не получается (Visual Studio 2013 Community Edition)
Стефан Фабиан
Я бы посоветовал добавить заголовок перед открывающей скобкой, чтобы после его свертывания вы все еще могли видеть имя (по крайней мере, в других компиляторах).
Emad Y
12

В C ++ нет эквивалента. Однако в IDE должна быть возможность сворачивать разделы.

Также можно использовать что-то вроде этого:

#pragma region

#pragma endregion A comment about the region.

Но наверное не очень портативный

Огненный дракон
источник
10

Нет эквивалента. Эта #regionфункция является частью спецификации C #.

В C ++ такого эквивалента нет. Вы могли бы имитировать это с помощью специально отформатированных комментариев, но это будет зависеть от редактора.

Для Visual Studio вы можете использовать:

#pragma region name
...
#pragma endregion name
Одед
источник
1
Поэтому, когда вы говорите, что такого эквивалента нет, вы ошибаетесь, потому что #pragma region это , по сути, его функциональный эквивалент.
Дмитрий Нестерук
8
@DmitriNesteruk - нет, это не так, если вы используете любую IDE, кроме Visual Studio. #regionопределено в спецификации, и IDE, которые соответствуют спецификации, должны разрешать сворачивание регионов - этого нельзя сказать #pragma region.
Oded
9

Я использовал

#ifndef ANY_NAME_FOR_THIS_REGION
    ...
#endif

для нескольких проектов за последние пару лет и это меня устраивает (в том числе разборные блоки). В качестве дополнения я могу отключить блок, используя #define ANY_NAME_FOR_THIS_REGION чуть выше него.

Drout
источник
1
#if 1 даже проще, чем #ifndef, но ... он не требует использования символа для описания цели этой области (имя, следующее за #ifndef) - я знаю, что вы можете добавить или добавить комментарий к "#if 1" ", но не в среде IDE. Честно говоря, я до сих пор используют «#if 1..else..endif» только тогда , когда мне нужно выполнить только один из двух блоков кода (один блок XOR другой)
Drout
2

Просто дополнение к другим ответам. Определение региона варьируется от IDE к IDE.

Для разработки Mac в Xcode вы можете использовать прагму:

#pragma mark
Виктор Латыпов
источник
1

C ++ Builder делает это поддерживать, но вы должны объявить регион:

#pragma region BLAH

.....

#pragma end_region

Вы должны использовать end_region для C ++ Builder, но он будет работать, и это будет свернуть регион!

user4351871
источник
0

Кейт, KDevelop и все другие текстовые редакторы и Иды , которые используют Katepart поддерживает разметку областей с //BEGINи //ENDмаркеры.

// BEGIN GPT entity types
#define GPT_ENT_TYPE_UNUSED \
    {0x00000000,0x0000,0x0000,0x00,0x00,{0x00,0x00,0x00,0x00,0x00,0x00}}
#define GPT_ENT_TYPE_EFI \
    {0xc12a7328,0xf81f,0x11d2,0xba,0x4b,{0x00,0xa0,0xc9,0x3e,0xc9,0x3b}}
#define GPT_ENT_TYPE_MBR \
    {0x024dee41,0x33e7,0x11d3,0x9d,0x69,{0x00,0x08,0xc7,0x81,0xf3,0x9f}}
// END

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

Саурон
источник
-1

Нет эквивалента.

Большинство хороших редакторов или IDE позволят вам свернуть функции, если не также if/ else/ while/ for/ и т. Д.

Танатос
источник
-2

В первом ответе на этот вопрос упоминается еще одна альтернатива. Однако это применимо не во всех ситуациях.

Метод: используйте вместо него {...}, который изначально поддерживает сворачивание кода в Visual Studio.

  1. Включите опцию: Инструменты -> Параметры -> Текстовый редактор -> C / C ++ -> Форматирование -> Блоки операторов OutLine -> True.

  2. Поместите ваш в разные области видимости {...}, тогда код свернется в разные области:

Пример свертывания кода с заданной областью

Сельмар
источник
7
Это может работать не со всем кодом, так как это вызовет проблемы с областью видимости для переменных внутри этого блока
asami