【问题标题】:Visually marking conditional compilation [closed]可视化标记条件编译[关闭]
【发布时间】:2009-06-02 20:17:58
【问题描述】:

我们有大量为多个目标编译的C/C++ 代码,由#ifdefs 分隔。其中一个目标与其他目标非常不同,了解您正在编辑的代码是否针对该目标编译通常很重要。不幸的是,#ifdefs 可能非常分散,因此为哪些目标编译哪些代码并不总是很明显。

Visual Studio 的 #ifdef 突出显示有助于直观地识别为哪个目标编译了哪些代码,但更改突出显示显然需要修改项目文件。

我有兴趣找到一种工具或方法来帮助编码人员快速识别哪些目标正在使用每一行代码。即使它需要某种手动的源内注释,我认为它仍然会有所帮助。最好的情况是它是自动化的,不依赖于特定的编辑器或 IDE,并且可以配置为在某些情况下发出警告(例如,“您在 Target X 上修改了一些代码,请务必在该平台上测试您的代码!”)。

【问题讨论】:

    标签: c++ cross-platform c-preprocessor


    【解决方案1】:

    如果您的代码变得如此之大,以至于您无法分辨 #ifdef 是什么,那么是时候重构您的代码了。我建议您将其重构为每个平台的单独 cpp 文件。

    我通常只在代码只有一两行长时才使用#idef,不再使用,我通常将它的唯一函数或类重构到自己的 cpp 文件中。这样可以很容易地确定您的位置。

    【讨论】:

    • 这取决于平台相关的内容,如果您对不同的整个功能有明确的划分,那么这样做很好......但否则,这可能很快成为重构的噩梦(更何况你没有工具,而且可能有很多遗留代码..)
    • 我同意重构可能是一场噩梦,但我认为最终还是值得的。遗留代码是杀手...我对遗留代码的处理方法是保留它,直到我需要触摸它。一旦我需要触摸它,就是在我进行重构时。
    【解决方案2】:

    查看Visual SlickEdit“选择性显示” 选项可能正是您所寻找的。我找不到任何关于它的在线文档,但它可以让您基本上应用 一组宏定义到代码中。所以你可以告诉它向你展示代码,因为编译器会看到它定义了一组宏。这不仅仅是预处理器的输出,因为它实际上隐藏了根据宏定义将被排除的代码块。

    不过,这并不能让您回答“在什么预处理器条件下,这行代码包含在编译中”的问题。好处是它将选择性显示过滤器应用于搜索和打印。

    【讨论】:

    • 免费试用期能持续多久?我没找到...
    • SlickEdit 试用版持续 30 天 - 意识到没有它你就活不下去,需要的时间要短得多。 :)
    • @Rune:毫无疑问......我不记得没有 SlickEdit 的生活,每次启动 Visual Studio 时我都会畏缩。
    【解决方案3】:

    我知道 eclipse cdt 可以做到这一点。它还有其他不错的功能和一些对于 IDE 来说不太好的功能。现在,我用 vi 编码,所以我可能有偏见。

    【讨论】:

      【解决方案4】:

      我不知道是否已经有这样的工具,但我想通过使用预编译器来推出你自己的工具会相当容易。使用一组特定的#defines 预编译您的文件,输出就是编译器针对该平台看到的内容。我认为这与突出显示 current 文件不同,但它可以自动化并集成到您的 IDE 中,按下按钮获取一个临时文件,其中包含当前在特定#define 下编辑的文件。自己没试过,只是一个想法。

      附言。是的,我必须阅读你的帖子几次才能搜索“代码覆盖率”到底在哪里涉及大声笑。

      【讨论】:

      • 在这种情况下,问题是获得好的#defines集合......这并不容易只触发你想要的部分......
      • 如果已经有编辑能够做到这一点,那么重新发明...备用轮胎真的没有意义
      【解决方案5】:

      检查XRefactoryCscout

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        • 1970-01-01
        • 2015-01-26
        • 2012-08-25
        • 1970-01-01
        • 2012-11-09
        相关资源
        最近更新 更多