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?


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() {}

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.


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


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

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.


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

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 !


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.


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


-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


7
Dies funktioniert möglicherweise nicht mit dem gesamten Code, da dies zu Problemen mit dem
— Gültigkeitsbereich von
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.