【问题标题】:Equivalent of #region for C++等效于 C++ 的 #region
【发布时间】:2012-02-18 12:07:31
【问题描述】:

C++ 中#region 的 C++ 等价物是什么,以便我可以放入自定义代码可折叠位并使我的代码更易于阅读?

【问题讨论】:

  • 这是 IDE 的一个特性,而不是语言,不是吗?
  • @BjörnPollex,它由 IDE 使用,但不应与语言语法冲突,编译器也必须接受它。
  • #region,就 C# 而言,是有效的语法并描述了一个代码区域。 Visual Studio 允许您折叠它们,作为 IDE 功能。
  • 你不能使用#region 让你的代码更容易阅读,#region 让你的代码更容易阅读。
  • 我建议一行注释后跟一个块语句。

标签: c# c++


【解决方案1】:

我使用多个具有相同命名空间的命名空间代码块。 IDE让我按命名空间块折叠,所以我只看到我正在处理的单个块的代码,例如

namespace MyNamespace{ // Quantise utility
  int Quantise1() { ...}
  float Quantise2() { ...}
} // MyNamespace Quantise utility
namespace MyNamespace{ // ADC utility
  int ADC1() { ...}
  float ADC2() { ...}
} // MyNamespace ADC utility

【讨论】:

    【解决方案2】:

    只是对其他答案的补充。区域定义因 IDE 而异。

    对于Xcode 中的 Mac 开发,您可以使用编译指示:

    #pragma mark
    

    【讨论】:

      【解决方案3】:

      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
      

      您将能够折叠以这种方式定义的区域。

      【讨论】:

        【解决方案4】:

        我一直在用

        #ifndef ANY_NAME_FOR_THIS_REGION
            ...
        #endif
        

        在过去几年的几个项目中,这很适合我(包括可折叠积木)。另外,我可以使用上面的#define ANY_NAME_FOR_THIS_REGION 禁用该块。

        【讨论】:

        • #if 1 甚至比#ifndef 更简单,但是.. 它不强制使用符号来描述该区域的用途(#ifndef 后面的名称) - 我知道你可以预先或将注释附加到“#if 1”,但它不受 IDE 管理。老实说,当我只需要执行两个代码块之一(一个块异或另一个)时,我仍然使用“#if 1..else..endif”
        【解决方案5】:

        C++Builder 确实支持这一点,但您必须将区域声明为:

        #pragma region BLAH
        
        .....
        
        #pragma end_region
        

        必须为 C++Builder 使用 end_region,但它工作,而且它折叠该区域!

        【讨论】:

          【解决方案6】:

          this question 的第一个答案提到了另一种选择。不过,它并非适用于所有情况。

          方法:使用 {...} 代替它本机支持 Visual Studio 中的代码折叠。

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

          2. 把你放在不同的作用域{...},那么它会折叠不同作用域的代码:

          【讨论】:

          • 这可能不适用于所有代码,因为它会导致此块内变量的范围问题
          【解决方案7】:

          没有等价物。 #region feature 是 C# 规范的一部分。

          C++ 没有这样的等价物。您可以使用特殊格式的 cmets 来模仿它,但这将是特定于编辑器的。

          对于 Visual Studio,您可以使用:

          #pragma region name
          ...
          #pragma endregion name
          

          【讨论】:

          • 所以当你说没有这样的等价物时你错了,因为#pragma region ,就所有意图和目的而言,它的功能等价物。
          • @DmitriNesteruk - 不,不是 - 如果您使用任何不是 Visual Studio 的 IDE,则不会。 #region 在规范中定义,符合规范的 IDE 应该允许折叠区域 - 对于 #pragma region 不能这样说。
          【解决方案8】:

          除了用于 Visual Studio 的 #pragma region#pragma endregion 之外,许多 IDE 还支持任何 {}-delimited、//-commented 语言中区域的以下语法:

          //{ Region header text.
          …
          //}
          

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

          【讨论】:

          • VS 支持这个吗?
          • 刚试过,不行(Visual Studio 2013社区版)
          • 我建议在左大括号之前添加标题,以便在折叠时您仍然可以看到名称(至少在更多编译器中)。
          【解决方案9】:

          Region keyword 是特定于 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 编译器否认它?有什么后果吗?谢谢
          • 刚刚使用Mingw 进行了检查。使用gcc -Wall,显示有关未知编译指示的警告。喜欢:warning: ignoring #pragma region test [-Wunknown-pragmas]warning: ignoring #pragma endregion [-Wunknown-pragmas]
          【解决方案10】:

          C++ 中没有等价物。但是 IDE 应该能够折叠部分。

          也可以这样使用:

          #pragma region
          
          #pragma endregion A comment about the region.
          

          但可能不是很便携

          【讨论】:

            【解决方案11】:

            没有等价物。

            大多数优秀的编辑器或 IDE 都会让你折叠函数,如果不是 if/else/while/for/etc.

            【讨论】:

              猜你喜欢
              • 2011-01-21
              • 2011-01-29
              • 1970-01-01
              • 2017-08-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-10-30
              相关资源
              最近更新 更多