Entspricht #region für C ++

83

Was ist das C ++ - Äquivalent von #region für C ++, damit ich benutzerdefinierte Code-Faltbits einfügen und meinen Code ein wenig leichter lesbar machen kann?

Sir Yakalot
quelle
14
Dies ist eher eine Funktion der IDE als der Sprache, nicht wahr?
Björn Pollex
4
@ BjörnPollex, es wird von der IDE verwendet, sollte aber nicht mit der Sprachsyntax in Konflikt stehen und der Compiler muss es ebenfalls akzeptieren.
Darin Dimitrov
1
#regionWas C # betrifft, ist die Syntax gültig und beschreibt einen Codebereich. Mit Visual Studio können Sie sie als IDE-Funktion falten.
Thanatos
10
Sie können nicht #region verwenden , um Ihren Code leichter lesbar zu machen, #region macht Code leichter zu nicht lesen.
jk.
Ich schlage einen Zeilenkommentar vor, gefolgt von einer Blockanweisung.
Grault

Antworten:

90

Das Schlüsselwort Region ist IDE-spezifisch und wirkt sich auf das Rendern in Visual Studio aus. Das nächste Äquivalent ist #pragma Region, das nur für Visual Studio gilt.

Codebeispiel von 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
quelle
Wenn es nur IDE-spezifisch ist, sollte ich mir Gedanken über das Kompilieren eines Codes mit machen #pragma region? Gibt es einen C-Compiler, der dies bestreitet? Gibt es überhaupt Konsequenzen? Danke
Ramon Dias
Einfach mit überprüft Mingw. Mit gcc -Wall, werden Warnungen vor unbekannten Pragmas angezeigt. Wie: warning: ignoring #pragma region test [-Wunknown-pragmas]undwarning: ignoring #pragma endregion [-Wunknown-pragmas]
Ramon Dias
28

Zusätzlich zu #pragma region#pragma endregionfür Visual Studio unterstützen viele IDEs die folgende Syntax für Regionen in einer beliebigen, {}begrenzten, //kommentierten Sprache:

//{ Region header text.//}

Zu den bemerkenswerten Beispielen gehören Code :: Blocks und FlashDevelop sowie alle anderen Editoren, die die Scintilla- Bearbeitungskomponente verwenden, z. B. Notepad ++ , Geany , Komodo Edit und viele mehr.

Jon Purdy
quelle
Unterstützt VS dies?
Dmitri Nesteruk
1
Nur versucht, es nicht (Visual Studio 2013 Community Edition)
Stefan Fabian
Ich würde vorschlagen, den Header vor der öffnenden Klammer hinzuzufügen, damit Sie den Namen nach dem Reduzieren immer noch sehen können (zumindest in mehr Compilern).
Emad Y
12

In C ++ gibt es kein Äquivalent. IDEs sollten jedoch in der Lage sein, Abschnitte zu reduzieren.

Es ist auch möglich, so etwas zu verwenden:

#pragma region

#pragma endregion A comment about the region.

Aber wahrscheinlich nicht sehr tragbar

Feuerdrache
quelle
10

Es gibt kein Äquivalent. Die #regionFunktion ist Teil der C # -Spezifikation.

C ++ hat kein solches Äquivalent. Sie könnten es möglicherweise mit speziell formatierten Kommentaren nachahmen, dies wäre jedoch editor-spezifisch.

Für Visual Studio können Sie Folgendes verwenden:

#pragma region name
...
#pragma endregion name
Oded
quelle
1
Wenn Sie also sagen, dass es kein solches Äquivalent gibt, liegen Sie falsch, weil #pragma region es in jeder Hinsicht das funktionale Äquivalent ist.
Dmitri Nesteruk
8
@DmitriNesteruk - nein, ist es nicht - nicht, wenn Sie eine IDE verwenden, die nicht Visual Studio ist. #regionist in der Spezifikation definiert und IDEs, die der Spezifikation entsprechen, sollten kollabierende Regionen zulassen - dies kann nicht gesagt werden #pragma region.
Oded
9

Ich habe benutzt

#ifndef ANY_NAME_FOR_THIS_REGION
    ...
#endif

für mehrere Projekte in den letzten Jahren und das passt zu mir (einschließlich zusammenklappbarer Blöcke). Zusätzlich kann ich den Block mit #define ANY_NAME_FOR_THIS_REGION direkt darüber deaktivieren.

Drout
quelle
1
#if 1 ist noch einfacher als #ifndef, aber es erzwingt nicht die Verwendung eines Symbols zur Beschreibung des Zwecks dieser Region (der Name folgt auf #ifndef). Ich weiß, dass Sie "#if 1" einen Kommentar voranstellen oder anhängen können ", aber es wird nicht von der IDE verwaltet. Um ehrlich zu sein, benutze ich immer noch "#if 1..else..endif", wenn ich nur einen von zwei Codeblöcken ausführen muss (ein Block XOR der andere)
Drout
2

Nur eine Ergänzung zu anderen Antworten. Die Regionsdefinition variiert von IDE zu IDE.

Für die Mac-Entwicklung in Xcode können Sie ein Pragma verwenden:

#pragma mark
Viktor Latypov
quelle
1

C ++ Builder unterstützt dies zwar, aber Sie müssen die Region wie folgt deklarieren:

#pragma region BLAH

.....

#pragma end_region

Sie müssen end_region für C ++ Builder verwenden, aber es wird funktionieren und die Region wird reduziert !

user4351871
quelle
0

Kate, KDevelop und alle anderen Texteditoren und IDEs, die Katepart verwenden, unterstützen das Markieren von Regionen mit //BEGINund //ENDMarkierungen.

// 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

Sie können eine so definierte Region reduzieren.

Sauron
quelle
-1

Es gibt kein Äquivalent.

Mit den meisten guten Editoren oder IDEs können Sie Funktionen reduzieren, wenn nicht auch if/ else/ while/ for/ etc.

Thanatos
quelle
-2

Die erste Antwort auf diese Frage erwähnt eine andere Alternative. Es ist jedoch nicht in allen Situationen anwendbar.

Methode: Verwenden Sie stattdessen {...}, das das Reduzieren von Code in Visual Studio nativ unterstützt.

  1. Option aktivieren: Extras -> Optionen -> Texteditor -> C / C ++ -> Formatierung -> OutLine-Anweisungsblöcke -> True.

  2. Setzen Sie Ihre in verschiedene Bereiche {...}, dann wird der Code in verschiedenen Bereichen reduziert:

Beispiel für das Reduzieren von Code mit Gültigkeitsbereich

Selmar
quelle
7
Dies funktioniert möglicherweise nicht mit dem gesamten Code, da dies zu Problemen mit dem
Gültigkeitsbereich von