【问题标题】:Fast way to insert include guard in Visual Studio在 Visual Studio 中插入包含防护的快速方法
【发布时间】:2013-06-07 07:04:58
【问题描述】:

我想将include guards 自动插入到 Visual Studio 2012 中新创建的头文件中。是否有任何预定义的 sn-p 用于此目的?

编辑:我知道#pragma once 和编译器的广泛支持。但是我们的编码风格迫使我使用 include 守卫。

【问题讨论】:

  • 创建一个相当简单的 VS 宏 - 请参阅下面的答案。然后你可以给它分配一个热键。

标签: c++ visual-studio visual-studio-2012


【解决方案1】:

在 Visual Studio 2012 中使用组合键

Ctrl+K,Ctrl+S

它允许您使用代码 sn-ps 包围选定的代码,例如:

#if#ifdef#ifndefifclassdoenum 等等

.. 或指定您自己的: http://msdn.microsoft.com/en-us/library/ms165394.aspx

【讨论】:

  • 啊我错过了 VS 2012 部分 - 我在 VS2010 中尝试过,它告诉我“...绑定到当前不可用的环绕命令”...所以他们似乎添加了它介于两者之间!感谢您的快速回答
【解决方案2】:

#pragma once?

但不,我不知道有什么会自动为您插入 #ifndef 等。

【讨论】:

  • Pragma once 是默认的,与问题无关。问题中已经提到过。
  • @saurabheights:请注意,问题中的部分是在这个答案之后添加的......
【解决方案3】:

由于您要标记 C++,因此您应该通过内置向导添加类。该向导创建#pragma once 指令。这甚至适用于其他编译器:#pragma once,因此您不会破坏平台交叉兼容性。

但是,您可以做的是创建一个像这样的 VS 宏:

Option Strict Off
Option Explicit Off
Imports System

Public Module HeaderGuard
    Sub InsertHeaderGuard()
        Dim filename As String = DTE.ActiveDocument.Name
        filename = filename.ToUpper().Replace("."c, "_"c)
        DTE.ActiveDocument.Selection.Text = "#ifndef " + filename
        DTE.ActiveDocument.Selection.NewLine()
        DTE.ActiveDocument.Selection.Text = "#define " + filename
        DTE.ActiveDocument.Selection.NewLine(2)
        DTE.ActiveDocument.Selection.Text = "#endif /* " + filename + " */"
        DTE.ActiveDocument.Selection.NewLine()
    End Sub
End Module

【讨论】:

  • 除非使用 Visual Studio 2012(或更新版本),其中宏支持已被删除。
  • 嗯,这不太好。但可以考虑用它做一个附加组件:stackoverflow.com/questions/12027485/…(虽然没试过)
  • @RolfKristensen:他们真的删除了宏支持吗?这是多么愚蠢!我在 VS2005 中创建了大量的宏,这些宏执行诸如使用 #ifdef 样式保护设置新文件、使用 cmets 创建类和函数之类的事情。与宏相比,附加组件的创建工作量太大。这是否也意味着记录临时宏也消失了? VS 曾经非常好,但似乎每个版本都变得更糟。目前正在迁移到 emacs。
  • 看起来,录制宏也不见了。这个也不知道。目前我正在查看 Visualstudiogallery (visualstudiogallery.msdn.microsoft.com) 是否有可能有帮助的扩展。
【解决方案4】:

您可以使用autohotkey 之类的工具。这是一个类似问题的answer

【讨论】:

    【解决方案5】:

    如果您有 Visual Assist X,则可以删除您的 #pragma once(如果存在),选择其余文本,右键单击并 Surround with (VA) => #ifdef guard in a header。如果您不喜欢默认设置,您可以将其覆盖到 VASSISTX 菜单并选择 Tools => Edit VA Snippets...

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 2013-11-26
      • 2010-09-20
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多