与C ++的#region等效


83

#region与C ++的C ++等效是什么,因此我可以放入自定义代码可折叠位,并使代码更易于阅读?


14
这是IDE的功能,而不是语言的功能,不是吗?
比约恩博动

4
@BjörnPollex,它由IDE使用,但不应与语言语法冲突,并且编译器也必须接受它。
达林·迪米特洛夫

1
#region就C#而言,是有效的语法并描述了代码区域。Visual Studio允许您将它们折叠起来,作为一种IDE功能。
塔纳托斯(Thanatos)2012年

10
你不能使用#区域,使你的代码更易于阅读,#区域让你的代码更容易读。
jk。

我建议在一行注释后加一个块语句。
Grault 2014年

Answers:


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编译器?有什么后果吗?谢谢
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还在任何-{}分隔的-//注释语言中支持以下语法:

//{ Region header text.//}

值得注意的示例包括Code :: BlocksFlashDevelop,以及使用Scintilla编辑组件的任何其他编辑器,例如Notepad ++GeanyKomodo Edit等等。


VS支持吗?
Dmitri Nesteruk 2014年

1
刚刚尝试过,但没有(Visual Studio 2013社区版)
Stefan Fabian

我建议在开头花括号之前添加标头,以使它折叠时仍然可以看到名称(至少在更多编译器中)。
Emad Y

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 is都是其功能等效项。
Dmitri Nesteruk 2014年

8
@DmitriNesteruk-不,不是-如果您使用的不是Visual Studio,则不是。#region是在规范中定义的,符合规范的IDE应该允许崩溃的区域-不能这样说#pragma region
奥德2014年

9

我一直在用

#ifndef ANY_NAME_FOR_THIS_REGION
    ...
#endif

在过去的几年中完成了几个项目,并且很适合我(包括可折叠的砌块)。另外,我可以在其上方使用#define ANY_NAME_FOR_THIS_REGION禁用该块。


1
#if 1甚至比#ifndef更简单,但是..它不强制使用符号来描述该区域的用途(#ifndef之后的名称)-我知道您可以在“ #ifn 1之前添加注释或附加注释” ”,但不受IDE管理。老实说,当我只需要执行两个代码块之一(一个块与另一个代码块进行异或)时,我仍然使用“ #if 1..else..endif”
Drout


1

C ++ Builder 确实支持此功能,但是您必须将区域声明为:

#pragma region BLAH

.....

#pragma end_region

必须使用end_region对于C ++ Builder,但它工作,它崩溃的区域!


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

没有对等的东西。

大多数优秀的编辑器或集成开发环境会让你崩溃的功能,如果不还if/ else/ while/ for/等。


-2

这个问题的第一个答案提到了另一种选择。但是,它并不适用于所有情况。

方法:改用{...},它本身支持Visual Studio中的代码折叠。

  1. 启用选项:工具->选项->文本编辑器-> C / C ++->格式->大纲语句块-> True。

  2. 将您放在不同的范围{...}中,然后它将代码折叠到不同的范围中:

范围代码折叠示例


7
这可能不适用于所有代码,因为它将导致此块中变量的作用域问题
asami 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.