可视化标记条件编译

时间:2009-06-02 20:17:58

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

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

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

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

5 个答案:

答案 0 :(得分:5)

如果你的代码变得那么大,你无法告诉你的#ifdef,那么是时候重构你的代码了。我建议你将它重构为每个平台的单独cpp文件。

我只能使用#idef,当代码只有一行或两行,更长时间,我通常会将它的唯一函数或类重构为自己的cpp文件。这样可以很容易地找出你的位置。

答案 1 :(得分:1)

结帐Visual SlickEdit。您可能正在寻找“选择性显示”选项。我找不到任何关于它的在线文档,但它允许您基本上一组宏定义应用于代码。因此,您可以告诉它向您展示代码,因为编译器将使用一组定义的宏来查看它。这比预处理器输出要多得多,因为它实际上隐藏了基于宏定义排除的代码块。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

PS。是的,我必须阅读你的帖子几次才能找到涉及“代码覆盖”的确切位置。

答案 4 :(得分:0)

检查XRefactoryCscout