Odpowiednik #region dla C ++

84

Jaki jest odpowiednik #region w C ++ dla C ++, więc mogę umieścić w kodzie niestandardowym zwijane bity i sprawić, że mój kod będzie trochę łatwiejszy do odczytania?

SirYakalot
źródło
14
To raczej cecha IDE niż języka, prawda?
Björn Pollex
4
@ BjörnPollex, jest używany przez IDE, ale nie powinien kolidować ze składnią języka, a kompilator również musi to zaakceptować.
Darin Dimitrov
1
#region, o ile C # idzie, jest prawidłową składnią i wyznacza region kodu. Visual Studio pozwala je składać jako funkcję IDE.
Thanatos
10
nie można używać #region aby kod łatwiejsze do odczytania, #region sprawia, że łatwiej jest kod nie czytać.
jk.
Proponuję komentarz linii, po którym następuje instrukcja blokowa.
Grault

Odpowiedzi:

91

Kluczowe Region jest IDE specyficzne i wpływa renderowania w Visual Studio. Najbliższy odpowiednik to #pragma Region, który ma zastosowanie tylko do programu Visual Studio.

Przykład kodu z MSDN

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

int main() {}
Dr Andrew Burnett-Thompson
źródło
jeśli jest to tylko specyficzne dla IDE, czy powinienem się martwić kompilowaniem kodu #pragma region? Czy jest jakiś kompilator C, który temu zaprzecza? Czy są jakieś konsekwencje? Dzięki
Ramon Dias,
Właśnie sprawdzone przy użyciu Mingw. Użycie gcc -Wallwyświetla ostrzeżenia o nieznanych pragmatach. Na przykład: warning: ignoring #pragma region test [-Wunknown-pragmas]iwarning: ignoring #pragma endregion [-Wunknown-pragmas]
Ramon Dias,
28

Oprócz #pragma region#pragma endregiondla programu Visual Studio wiele środowisk IDE obsługuje następującą składnię regionów w dowolnym języku z {}ograniczeniami i komentarzami //:

//{ Region header text.//}

Godne uwagi przykłady to Code :: Blocks i FlashDevelop oraz każdy inny edytor, który używa komponentu edycyjnego Scintilla , taki jak Notepad ++ , Geany , Komodo Edit i wiele innych.

Jon Purdy
źródło
Czy VS to obsługuje?
Dmitri Nesteruk
1
Właśnie próbowałem, ale nie działa (Visual Studio 2013 Community Edition)
Stefan Fabian,
Sugerowałbym dodanie nagłówka przed nawiasem otwierającym, aby po zwinięciu nadal można było zobaczyć nazwę (przynajmniej w większej liczbie kompilatorów).
Emad Y
12

W C ++ nie ma odpowiednika. Jednak środowiska IDE powinny mieć możliwość zwijania sekcji.

Możliwe jest również użycie czegoś takiego:

#pragma region

#pragma endregion A comment about the region.

Ale prawdopodobnie niezbyt przenośny

Ognisty smok
źródło
10

Nie ma odpowiednika. Ta #regionfunkcja jest częścią specyfikacji języka C #.

C ++ nie ma takiego odpowiednika. Możesz to naśladować za pomocą specjalnie sformatowanych komentarzy, ale będzie to specyficzne dla edytora.

W przypadku programu Visual Studio możesz użyć:

#pragma region name
...
#pragma endregion name
Oded
źródło
1
Więc kiedy mówisz, nie ma takiego równoważne jesteś w błędzie, ponieważ #pragma region jest dla wszystkich zamiarów i celów, jego funkcjonalny odpowiednik.
Dmitri Nesteruk
8
@DmitriNesteruk - nie, nie jest - nie, jeśli używasz dowolnego środowiska IDE innego niż Visual Studio. #regionjest zdefiniowany w specyfikacji, a środowiska IDE zgodne ze specyfikacją powinny zezwalać na zapadanie się regionów - nie można tego powiedzieć #pragma region.
Oded
9

Używałem

#ifndef ANY_NAME_FOR_THIS_REGION
    ...
#endif

na kilka projektów w ciągu ostatnich kilku lat i to mi odpowiada (w tym składane bloki). dodatkowo mogę wyłączyć blok za pomocą #define ANY_NAME_FOR_THIS_REGION tuż nad nim.

Drout
źródło
1
#if 1 jest jeszcze prostsze niż #ifndef, ale ... nie wymusza użycia symbolu do opisania celu tego regionu (nazwa następująca po #ifndef) - wiem, że możesz dodać komentarz do „#if 1” ”, ale nie jest zarządzany przez IDE. Szczerze mówiąc, nadal używam „#if 1..else..endif” tylko wtedy, gdy muszę wykonać tylko jeden z dwóch bloków kodu (jeden blok XOR drugi)
Drout
2

To tylko dodatek do innych odpowiedzi. Definicja regionu różni się od IDE do IDE.

W przypadku programowania na komputery Mac w Xcode możesz użyć pragmy:

#pragma mark
Viktor Latypov
źródło
1

C ++ Builder to obsługuje, ale musisz zadeklarować region jako:

#pragma region BLAH

.....

#pragma end_region

Państwo musi użyć end_region dla C ++ Builder, ale to będzie działać, i to będzie zwinąć region!

user4351871
źródło
0

Kate, KDevelop i wszystkie inne edytory tekstu i IDE, które używają Katepart obsługują oznaczanie regionów znacznikami //BEGINi //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

Będziesz mógł zwinąć tak zdefiniowany region.

Sauron
źródło
-1

Nie ma odpowiednika.

Większość dobrych edytorów lub IDE pozwoli ci zwinąć funkcje, jeśli nie, to także if/ else/ while/ for/ etc.

Thanatos
źródło
-2

Pierwsza odpowiedź na to pytanie wymienia inną alternatywę. Nie ma to jednak zastosowania we wszystkich sytuacjach.

Metoda: zamiast tego użyj {...}, która natywnie obsługuje zwijanie kodu w programie Visual Studio.

  1. Włącz opcję: Narzędzia -> Opcje -> Edytor tekstu -> C / C ++ -> Formatowanie -> Bloki instrukcji OutLine -> True.

  2. Umieść swój w różnych zakresach {...}, a następnie zwinie kod w różnych zakresach:

Przykład zwijania kodu w określonym zakresie

Selmar
źródło
7
To może nie działać z całym kodem, ponieważ spowoduje problemy z określaniem zakresu dla zmiennych w tym bloku
asami