Tương đương với # vùng cho C ++


83

C ++ tương đương với #region cho C ++ là gì để tôi có thể đặt các bit có thể thu gọn vào mã tùy chỉnh và làm cho mã của tôi dễ đọc hơn một chút?


14
Đây là một tính năng của IDE chứ không phải là ngôn ngữ, phải không?
Björn Pollex

4
@ BjörnPollex, nó được IDE sử dụng nhưng nó không được xung đột với cú pháp ngôn ngữ và trình biên dịch cũng phải chấp nhận nó.
Darin Dimitrov

1
#region, theo như C #, là cú pháp hợp lệ và mô tả một vùng mã. Visual Studio cho phép bạn gấp chúng lại, như một tính năng IDE.
Thanatos

10
bạn không thể sử dụng #region để làm cho mã của bạn dễ đọc hơn, #region giúp bạn không đọc mã dễ dàng hơn .
jk.

Tôi đề xuất một nhận xét dòng theo sau bởi một tuyên bố khối.
Grault

Câu trả lời:


89

Các từ khóa Region là IDE cụ thể và ảnh hưởng đến render trong Visual Studio. Tương đương gần nhất là #pragma Region chỉ áp dụng cho Visual Studio.

Ví dụ mã từ MSDN

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

int main() {}

nếu nó chỉ có IDE cụ thể, tôi có nên lo lắng về việc biên dịch mã với #pragma region? Có trình biên dịch C nào từ chối nó không? Có hậu quả gì không? Cảm ơn
Ramon Dias

Chỉ cần kiểm tra bằng cách sử dụng Mingw. Sử dụng gcc -Wall, hiển thị cảnh báo về các pragmas không xác định. Thích: warning: ignoring #pragma region test [-Wunknown-pragmas]warning: ignoring #pragma endregion [-Wunknown-pragmas]
Ramon Dias

28

Ngoài #pragma region#pragma endregionđối với Visual Studio, nhiều IDE hỗ trợ cú pháp sau cho các vùng bằng bất kỳ ngôn ngữ-giới hạn {}, //-mặc điểm nào:

//{ Region header text.//}

Các ví dụ đáng chú ý bao gồm Code :: BlocksFlashDevelop và bất kỳ trình soạn thảo nào khác sử dụng thành phần chỉnh sửa Scintilla , chẳng hạn như Notepad ++ , Geany , Komodo Edit , và nhiều hơn nữa.


VS có hỗ trợ điều này không?
Dmitri Nesteruk

1
Chỉ cần thử, nó không (Visual Studio 2013 Community Edition)
Stefan Fabian

Tôi khuyên bạn nên thêm tiêu đề trước dấu ngoặc nhọn để khi nó được thu gọn, bạn vẫn có thể nhìn thấy tên (ít nhất là trong nhiều trình biên dịch hơn).
Emad Y

12

Không có tương đương trong C ++. Tuy nhiên, IDE có thể thu gọn các phần.

Nó cũng có thể sử dụng một cái gì đó như thế này:

#pragma region

#pragma endregion A comment about the region.

Nhưng có lẽ không di động lắm


10

Không có tương đương. Các #regiontính năng là một phần của C # đặc điểm kỹ thuật.

C ++ không có tương đương như vậy. Bạn có thể bắt chước nó bằng các nhận xét được định dạng đặc biệt, nhưng điều này sẽ là dành riêng cho người biên tập.

Đối với Visual Studio, bạn có thể sử dụng:

#pragma region name
...
#pragma endregion name

1
Vì vậy, khi bạn nói không có tương đương như bạn là sai vì #pragma region , đối với tất cả các tính năng, tương đương với chức năng của nó.
Dmitri Nesteruk

8
@DmitriNesteruk - không, không phải - không phải nếu bạn sử dụng bất kỳ IDE nào không phải là Visual Studio. #regionđược xác định trong thông số kỹ thuật và các IDE phù hợp với thông số kỹ thuật sẽ cho phép các vùng thu gọn - điều này không thể nói trước được #pragma region.
Oded

9

Tôi đã sử dụng

#ifndef ANY_NAME_FOR_THIS_REGION
    ...
#endif

cho một số dự án trong vài năm qua và phù hợp với tôi (bao gồm cả các khối có thể thu gọn). ngoài ra, tôi có thể tắt khối bằng cách sử dụng #define ANY_NAME_FOR_THIS_REGION ngay phía trên nó.


1
#if 1 thậm chí còn đơn giản hơn #ifndef, nhưng .. nó không bắt buộc sử dụng biểu tượng để mô tả mục đích của vùng đó (tên theo sau #ifndef) - Tôi biết bạn có thể thêm trước hoặc thêm nhận xét vào "#if 1 ", nhưng nó không được quản lý bởi IDE. Thành thật mà nói, tôi vẫn sử dụng "# nếu 1..else..endif" chỉ khi tôi cần phải thực hiện chỉ là một trong hai khối mã (một khối XOR khác)
Drout

2

Chỉ là một bổ sung cho các câu trả lời khác. Định nghĩa vùng thay đổi từ IDE đến IDE.

Để phát triển Mac trong Xcode, bạn có thể sử dụng pragma:

#pragma mark

1

C ++ Builder không hỗ trợ điều này, nhưng bạn phải khai báo vùng là:

#pragma region BLAH

.....

#pragma end_region

Bạn phải sử dụng end_region cho C ++ Builder, nhưng nó sẽ hoạt động và nó sẽ sụp đổ khu vực!


0

Kate, KDevelop và tất cả các trình soạn thảo văn bản và IDE khác sử dụng Katepart hỗ trợ đánh dấu các vùng bằng //BEGIN//ENDcác điểm đánh dấu.

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

Bạn sẽ có thể thu gọn một vùng được xác định theo cách đó.


-1

Không có tương đương.

Hầu hết các trình soạn thảo tốt hoặc IDE sẽ cho phép bạn thu gọn các chức năng, nếu không phải là if/ else/ while/ for/ vv.


-2

Câu trả lời đầu tiên từ câu hỏi này đề cập đến một sự thay thế khác. Tuy nhiên, nó không thể áp dụng trong mọi tình huống.

Phương pháp: Thay vào đó, hãy sử dụng {...} mà nguyên bản hỗ trợ thu gọn mã trong Visual Studio.

  1. Kích hoạt tùy chọn: Tools -> Options -> Text Editor -> C / C ++ -> Formatting -> OutLine Statement Blocks -> True.

  2. Đặt của bạn vào các phạm vi khác nhau {...}, sau đó nó sẽ thu gọn mã trong các phạm vi khác nhau:

Ví dụ về thu gọn mã theo phạm vi


7
Đây có thể không làm việc với tất cả các mã vì nó sẽ gây ra các vấn đề Phạm vi cho các biến bên trong khối này
asami
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.