2012-01-25 22 views
58

¿Cuál es el equivalente en C++ de #region para C++, así que puedo poner códigos plegables personalizados y hacer que mi código sea un poco más fácil de leer?Equivalente a #region para C++

+12

Esta es una característica del IDE en lugar del idioma, ¿no es así? –

+4

@ BjörnPollex, es utilizado por el IDE pero no debe entrar en conflicto con la sintaxis del lenguaje y el compilador debe aceptarlo también. –

+1

'# region', en lo que respecta a C#, es una sintaxis válida y delinea una región de código. Visual Studio te permite doblarlos, como una función IDE. – Thanatos

Respuesta

65

El Region keyword es IDE específico y afecta a la representación en Visual Studio. El equivalente más cercano es #pragma Region que solo se aplica a Visual Studio.

ejemplo Código de MSDN

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

int main() {} 
8

No hay equivalente. El #region feature es parte de la especificación C#.

C++ no tiene tal equivalente. Posiblemente podría imitarlo con comentarios especialmente formateados, pero esto sería específico del editor.

Para Visual Studio que puede utilizar:

#pragma region name 
... 
#pragma endregion name 
+1

Entonces, cuando dices * no hay tal equivalente *, estás equivocado porque '#pragma region' _is_, para todos los efectos, es su equivalente funcional. –

+6

@DmitriNesteruk - no, no lo es - no si usa cualquier IDE que no sea Visual Studio. '# region' se define en la especificación y los IDEs que se ajustan a la especificación deben permitir regiones colapsantes; esto no se puede decir para' #pragma region'. – Oded

0

No hay un equivalente.

mayoría de los buenos editores o entornos de desarrollo le permitirá contraer funciones, si no también if/else/while/for/etc.

10

No hay un equivalente en C++. Sin embargo, los IDE deberían poder colapsar las secciones.

También es posible usar algo como esto:

#pragma region 

#pragma endregion A comment about the region. 

Pero probablemente no muy portable

+0

MSVC specific ... – Aconcagua

19

Además de #pragma region ... #pragma endregion para Visual Studio, muchos entornos de desarrollo compatibles con la siguiente sintaxis para las regiones en cualquier {} -delimited, // lenguaje -commented:

//{ Region header text. 
… 
//} 

notable los ejemplos incluyen Code::Blocks y FlashDevelop, y cualquier otro editor que use el componente de edición Scintilla, como Notepad++, Geany, Komodo Edit, y muchos más.

+0

¿Lo admite VS? –

+1

Acabo de intentar, no (Visual Studio 2013 Community Edition) –

+0

Sugiero agregar el encabezado antes de la llave de apertura para que cuando se contraiga todavía pueda ver el nombre (en más compiladores al menos). –

0

Solo una adición a otras respuestas. La definición de región varía de IDE a IDE.

Para el desarrollo de Mac en Xcode puede utilizar a pragma:

#pragma mark 
-3

La primera respuesta de this question menciona otra alternativa. Sin embargo, no es aplicable en todas las situaciones.

Método: Utilice {...} en su lugar, que de forma nativa admite el colapso de código en Visual Studio.

  1. Habilitar opción: Herramientas -> Opciones -> Editor de texto - Bloques> Declaración de esquema - -> C/C++ -> Formato> True.

  2. Ponga su en distintos ámbitos {...}, entonces se colapsará el código en diferentes ámbitos:

Scoped code collapsing example

+5

Esto podría no funcionar con todo el código, ya que causará problemas de alcance para las variables dentro de este bloque – asami

0

C++Builderhace apoyo esto, pero usted debe declarar la región:

#pragma region BLAH 

..... 

#pragma end_region 

Usted debe use end_region para C++ Builder, pero funcionará, y colapsará la región!

5

He estado usando

#ifndef ANY_NAME_FOR_THIS_REGION 
    ... 
#endif 

para varios proyectos durante el último par de años y que me va (incluidos los tacos flexibles). como una adición, puedo desactivar el bloque usando #define ANY_NAME_FOR_THIS_REGION justo encima.

+0

formatee el área de código – manetsus

+1

Si solo se trata de poder colapsar una región, simplemente use '#if 1 # endif' ... – Aconcagua

+0

#if 1 es incluso más simple que #ifndef, pero .. no impone el uso de un símbolo para describir el propósito de esa región (el nombre que sigue a #ifndef) - Sé que puede anteponer o agregar un comentario a "#if 1 ", pero no está administrado por el IDE. Para ser sincero, sigo usando "#if 1..else..endif" justo cuando necesito ejecutar solo uno de dos bloques de código (un bloque XOR el otro) – Drout

0

Kate, KDevelop y todos los demás editores de texto e IDEs que utilizan Katepart admiten regiones de marcado con marcadores //BEGIN y //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 

Podrá contraer una región definida de esa manera.