C ++の#regionに相当


83

カスタムコードの折りたたみ可能なビットを挿入してコードを少し読みやすくするために、C ++の#regionに相当するC ++は何ですか?


14
これは言語ではなくIDEの機能ですよね。
ビョルンPollex

4
@BjörnPollex、IDEによって使用されますが、言語構文と競合してはならず、コンパイラーもそれを受け入れる必要があります。
ダリンディミトロフ2012年

1
#region、C#に関する限り、有効な構文であり、コードの領域を示します。Visual Studioでは、IDE機能としてそれらを折りたたむことができます。
タナトス2012年

10
あなたは#regionが簡単にあなたがコードすることができ、読むためにあなたのコードを容易にするために#regionを使用することはできませんではない読んで。
JK。

行コメントの後にブロックステートメントを続けることをお勧めします。
Grault 2014年

回答:


89

地域キーワードは、 IDEの固有のものであり、Visual Studioでのレンダリングに影響します。最も近い同等のものは、VisualStudioにのみ適用可能な#pragmaRegionです

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コンパイラはありますか?何か影響はありますか?ありがとう
Ramon Dias

を使用して確認しましたMingw。を使用するとgcc -Wall、不明なプラグマに関する警告が表示されます。のように: warning: ignoring #pragma region test [-Wunknown-pragmas]warning: ignoring #pragma endregion [-Wunknown-pragmas]
ラモンディアス

28

Visual Studioの#pragma region#pragma endregionに加えて、多くのIDEは、{}-delimited、//-commented言語のリージョンに対して次の構文をサポートしています。

//{ Region header text.//}

注目すべき例には、Code :: BlocksFlashDevelop、およびNotepad ++などのScintilla編集コンポーネントを使用するその他のエディターが含まれます Geanyコモド編集、および多くを。


VSはこれをサポートしていますか?
Dmitri Nesteruk 2014年

1
試したところ、そうではありません(Visual Studio 2013 Community Edition)
Stefan Fabian

中括弧の前にヘッダーを追加して、折りたたまれたときに名前が表示されるようにすることをお勧めします(少なくともより多くのコンパイラーで)。
Emad Y 2016

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 すべての意図や目的、その機能的同等物のために、。
Dmitri Nesteruk 2014年

8
@ DmitriNesteruk-いいえ、そうではありません-VisualStudio以外のIDEを使用している場合はそうではありません。#regionは仕様で定義されており、仕様に準拠するIDEは、領域の折りたたみを許可する必要があります#pragma region。これは、については言えません。
2014年

9

私は使ってきました

#ifndef ANY_NAME_FOR_THIS_REGION
    ...
#endif

過去数年間のいくつかのプロジェクトで、それは私に合っています(折りたたみ可能なブロックを含む)。さらに、そのすぐ上にある#define ANY_NAME_FOR_THIS_REGIONを使用して、ブロックを無効にすることができます。


1
#if 1は#ifndefよりもさらに単純ですが、..その領域の目的を説明するための記号(#ifndefに続く名前)の使用を強制しません-「#if1」にコメントを追加または追加できることを知っています"、しかしそれはIDEによって管理されていません。私はただ一つのコードの二つのブロック(1つのブロックXOR他)の実行に必要なだけのとき正直に言うと、私はまだ「の#if 1..else..endif」を使用
DROUT


1

C ++ Builder これをサポートしていますが、リージョンを次のように宣言する必要があります。

#pragma region BLAH

.....

#pragma end_region

C ++ Builderにはend_regionを使用する必要ありますが、これ機能し、リージョン折りたたむことになります。


0

Kate、KDevelop、およびKatepartを使用する他のすべてのテキストエディタとIDEは//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/ etcでない場合でも、関数を折りたたむことができます。


-2

この質問の最初の回答は、別の代替案に言及しています。ただし、すべての状況に適用できるわけではありません。

方法:代わりに{...}を使用します。これは、VisualStudioでのコードの折りたたみをネイティブにサポートします。

  1. 有効化オプション:[ツール]-> [オプション]-> [テキストエディター]-> [C / C ++]-> [フォーマット]-> [アウトラインステートメントブロック]-> [True]。

  2. をさまざまなスコープに配置すると{...}、コードがさまざまなスコープに折りたたまれます。

スコープコードの折りたたみの例


7
これは、このブロック内の変数のスコープの問題を引き起こすため、すべてのコードで機能するとは限りません
asami 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.