Еквівалент #region для C ++


83

Що таке C ++ еквівалент #region для C ++, щоб я міг вкласти розбірні коди власного коду і зробити свій код трохи легшим для читання?


14
Це особливість IDE, а не мови, чи не так?
Björn Pollex

4
@ BjörnPollex, він використовується IDE, але він не повинен суперечити синтаксису мови, і компілятор також повинен його прийняти.
Дарін Димитров

1
#region, наскільки C # є дійсним синтаксисом і окреслює область коду. Visual Studio дозволяє їх складати як функцію IDE.
Танатос

10
Ви не можете використовувати #region, щоб полегшити читання коду, #region полегшує не читання коду .
jk.

Я пропоную рядковий коментар, за яким йде блок-заява.
Grault

Відповіді:


89

Регіон Ключове слово є 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, багато середовищ розробки {}ID підтримують такий синтаксис для регіонів будь-якою -делімітованою, коментованою //мовою:

//{ 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 # специфікації.

С ++ не має такого еквівалента. Ви могли б імітувати це за допомогою спеціально відформатованих коментарів, але це стосується лише редактора.

Для Visual Studio ви можете використовувати:

#pragma region name
...
#pragma endregion name

1
Отже, коли ви говорите, що такого еквівалента не існує, ви помиляєтесь, оскільки #pragma region є , попри всі наміри та функції, його функціональним еквівалентом.
Дмитро Нестерук

8
@DmitriNesteruk - ні, це не так - ні, якщо ви використовуєте будь-яку IDE, яка не є Visual Studio. #regionвизначено в специфікації, а IDE, які відповідають специфікації, повинні дозволяти області, що згортаються - цього не можна сказати #pragma region.
Отримано

9

Я використовував

#ifndef ANY_NAME_FOR_THIS_REGION
    ...
#endif

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


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, але він буде працювати, і це буде згорнути регіон!


0

Kate, 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 -> Істина.

  2. Помістіть свій код у різні області {...}, тоді він згорне код у різні області:

Приклад розгортання коду із сферою дії


7
Це може не працювати з усім кодом, оскільки це спричинить проблеми з обсягом для змінних всередині цього блоку
asami
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.