【问题标题】:Preprocess only local #includes into single file?仅将本地#includes 预处理到单个文件中?
【发布时间】:2014-06-04 10:43:11
【问题描述】:

我了解 VC++ 将允许您发出 C++ 源文件,这些源文件是预处理器操作的结果,例如宏被扩展并包括“复制粘贴在行中”。

是否可以将此限制为仅嵌入包含文件,这些文件是我自己的项目中的文件而不是标准库?

【问题讨论】:

  • 长答案:否 - 编译器无法区分哪些包含文件是您的,哪些属于标准库、SDK 等。它们只是被包括在内,并且有多种搜索路径可以找到它们——它不知道也不关心是谁写的。
  • 所以我必须为此制作一个自定义工具......如果有人想建议它,我会采取任何概述如何最好地作为答案。

标签: visual-c++ preprocessor


【解决方案1】:

从外部看,您无法判断内容正在被预处理的语法形式( 或“”)。除非预处理器暴露了某种 API,这里不是这样。

我可以提出的一个不太优雅(并且不是严格正确)的解决方案是索引所有标准头的预处理版本(没有那么多),在预处理感兴趣的源之后,您可以运行一个字符串匹配脚本来检测已知文件并从最终输出中删除相应的内容。

请注意,这是有缺陷的,因为#include 系统是纯文本的,并且受包含时(未)定义的任何宏的影响,并且顺序很重要。但根据您正在处理的代码的复杂性,这可能会产生合理的结果。

顺便问一下,你的任务的最终目标是什么?

编辑: 或者实际上...也许您可以事先过滤源以删除不需要的#includes,然后将其提交给预处理?

【讨论】:

  • 这实际上是一个非常具体的目标/用例。对于编程竞赛,我经常需要提交一个包含所有代码的文件……但是处理单个文件 C++ 项目会变得很棘手,所以我宁愿像往常一样处理多个文件,然后轻松地自动将所有内容打包在一起。跨度>
猜你喜欢
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多